Пример #1
0
void Rain::update(boost::asio::serial_port &port)
{
    // Make existing drops fall & decay
    for (uint8_t x = 0; x < CUBE_SIZE; ++x)
    {
        for (uint8_t z = 0; z < CUBE_SIZE; ++z)
        {
            for (std::list<RainDrop>::iterator iter = m_drops[x][z].begin();
                    iter != m_drops[x][z].end();)
            {
                // Decay brightness
                iter->brightness -= m_decay_rate;
                iter->height     -= m_fall_rate;

                if (iter->height <= 0.0f)
                    iter->height = 0.0f;

                /* Delete the drop when it's dimmed completely */
                if (iter->brightness <= 0.0f)
                    iter = m_drops[x][z].erase(iter);
                else
                    ++iter;
            }

        }
    }

    // Make new drops
    m_spawn_counter += m_spawn_rate;
    const uint32_t num_drops_to_spawn = static_cast<uint32_t>(m_spawn_counter);
    m_spawn_counter -= num_drops_to_spawn;

    for (uint32_t i = 0; i < num_drops_to_spawn; ++i)
    {
        const uint32_t new_x = rand() % 8;
        const uint32_t new_y = rand() % 8;
        float new_brightness = 0.5f + (static_cast<float>(rand() % 256)/512); // Random brightness at least 50% brightness

        m_drops[new_x][new_y].push_back(RainDrop(7.0f, new_brightness));
    }

    // Calculate the cube
    memset(m_cube, 0, sizeof(m_cube));
    for (uint8_t x = 0; x < CUBE_SIZE; ++x)
    {
        for (uint8_t z = 0; z < CUBE_SIZE; ++z)
        {
            for (std::list<RainDrop>::const_iterator iter = m_drops[x][z].begin();
                    iter != m_drops[x][z].end();
                    ++iter)
            {
                const uint8_t y = static_cast<uint8_t>(iter->height + 0.5f);
                m_cube[x][y][z] += iter->brightness;
            }
        }
    }

    send(port);
}
int main(void){  volatile unsigned long delay;
	int i,j,state,intensity,counter;
	SysTick_Init();
	LED_Init();
	counter = 0;
	state = 1;
	Alphabet('T');
	Alphabet('E');
    Alphabet('X');
	Alphabet('A');
	Alphabet('S');
	for (i =0;i < 25;i++){
		SpinUT();
	}
	while(1){
		index = 0;
		ADC_InitTimer0ATriggerSeq3(0, 0, CLOCKFREQ/SAMPLEFREQ);
		while(index < MAXBUFFERSIZE){};
		for(i=1; i<MAXBUFFERSIZE; i=i+1){
			Turn_Off();
			if(ADCbuffer[i] > 8){
				intensity = Find_ADCindex(ADCbuffer[i]);
				switch (state){
					case 0://welcome
						Animation0(Tdata[intensity]-1000);
						if(counter > 200){
							state = 1;
							counter = 0;
						}else{counter = counter +1;}
					break;
					case 1:
						Animation1(intensity);
						state = 1;
						if(counter > 200){
							state = 2;
							counter = 0;
						}else{counter = counter +1;}
					break;
					case 2:
						Animation4(intensity);
						if(counter > 200){
							state = 3;
							counter = 0;
						}else{counter = counter +1;}
					break;
					case 3:
						Animation3(intensity);
						state = 3;
						if(counter > 200){
							state = 4;
							counter = 0;
						}else{counter = counter +1;}
					break;
					case 4:
						RainDrop(Tdata[intensity]);
						if(counter > 200){
							state = 5;
							counter = 0;
						}else{counter = counter +1;}
						break;
						case 5:
							Animation2(intensity);
							if(counter > 200){
							state = 6;
							counter = 0;
						}else{counter = counter +1;}
						break;
						case 6:
							Animation5(intensity);
							if(counter > 200){
							state = 0;
							counter = 0;
						}else{counter = counter +1;}
							break;
				 default:
						Random();
						break;
				}
			}
    }
	} 
}
Пример #3
0
void TimedGameScene::update(sf::Event* e, sf::RenderWindow* window){
	m_player->update();
	int tileSize = 500 / TileManager::getInstance()->getSize();
	SoundManager::getInstance()->updateSpatial(m_player->getWorldPos() + sf::Vector2f(tileSize, tileSize), m_player->getVel());
	PowerUpManager::getInstance()->update();

	if (PowerUpManager::getInstance()->checkActive(PowerUp::Type::FRESH_START)){
		TileManager::getInstance()->resetRoom();
		TileManager::getInstance()->setUsed(m_player->getPos());
		TileManager::getInstance()->setUsedColour(m_player->getColour());
		m_powerUpLabel.setString("Powerup: Fresh Start");
	}
	if (PowerUpManager::getInstance()->checkActive(PowerUp::Type::MORETIME_ATTEMPTS)){
		m_timer += 10;
		m_powerUpLabel.setString("Powerup: Time");
	}
	if (PowerUpManager::getInstance()->checkActive(PowerUp::Type::SCORE)){
		m_score++;
		m_scoreLabel.setString("Score: " + std::to_string(m_score));
		m_powerUpLabel.setString("Powerup: Score");
	}

	m_raindrops.push_back(RainDrop(m_raindropSprite));

	for (std::vector<RainDrop>::iterator iter = m_raindrops.begin(); iter != m_raindrops.end(); iter++) {
		iter->update();
	}
	for (std::vector<RainDrop>::iterator iter = m_raindrops.begin(); iter != m_raindrops.end(); iter++)
	{
		if (!iter->getAlive()){
			m_raindrops.erase(iter);
			break;
		}
	}

	sf::Time dt = m_deltaClock.restart();
	m_timer -= dt.asSeconds();
	std::stringstream stream;
	stream.precision(2);
	stream << std::fixed << m_timer;
	m_timerLabel.setString("Timer: " + stream.str());
	AchievementManager::getInstance()->setTime(m_timer);

	if (m_timer <= 0){
		AchievementManager::getInstance()->setTimedCurrScore(m_score);
		SceneManager::getInstance()->goToScene(SceneID::TIMEGAMEOVER);		
	}
	TimedGameScene::checkWin();
	//xbox controls
	if (XBoxController::isConnected(0)) {
		TimedGameScene::xboxControls();
	}
	//keyboard controls
	TimedGameScene::keyboardControls(e, window);

	if (sf::Mouse::isButtonPressed(sf::Mouse::Left))
	{
		if (m_buttons[0].isClicked(sf::Vector2f(sf::Mouse::getPosition(*window).x, sf::Mouse::getPosition(*window).y))) {
			SceneManager::getInstance()->goToPause(SceneID::TIMEDGAME);
			m_buttons[0].setSelected(false);
		}
	}
	if (e->type == sf::Event::MouseMoved) {
		for (int i = 0; i < m_buttons.size(); i++)
		{
			m_buttons[i].isMouseOver(sf::Vector2f(sf::Mouse::getPosition(*window).x,
				sf::Mouse::getPosition(*window).y));
		}
	}
}