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; } } } } }
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)); } } }