bool BusPirateSPI::Open(const char *ttydev) { assert(fd_ < 0); int fd = open(ttydev, O_RDWR | O_NOCTTY); if (fd == -1) { perror("Unable to open device"); return false; } fd_ = fd; if (ConfigSerial() && EnableBinaryMode() && Powerup() && ConfigSPI()) { ttydev_ = ttydev; return true; } close(fd); fd_ = -1; return false; }
void NuevoNivel() { int prev_nivel = tiempo_nivel; tiempo_nivel += 20000; for (int n = 0;n < enemigos.size();n++) { enemigos[n].activo = true; enemigos[n].x = limites.right+1; enemigos[n].hp = 5; enemigos[n].material[0] = 1.0f; enemigos[n].material[1] = 1.0f; enemigos[n].material[2] = 1.0f; enemigos[n].material[3] = 1.0f; enemigos[n].disparos.clear(); enemigos[n].ultimo_disparo = 0; enemigos[n].tiempo_disparo -= 20; } for (int n = 0;n < asteroides.size();n++) { asteroides[n].activo = true; asteroides[n].x = limites.right + 0.5; asteroides[n].hp = 5; asteroides[n].material[0] = 1.0f; asteroides[n].material[1] = 1.0f; asteroides[n].material[2] = 1.0f; asteroides[n].material[3] = 1.0f; } for (int n = 0;n < powerups.size();n++) { powerups[n].activo = true; powerups[n].x = limites.right + 0.5; } tex1 = SOIL_load_OGL_texture( "tex1.png", SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_POWER_OF_TWO ); tex2 = SOIL_load_OGL_texture( "tex2.png", SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_POWER_OF_TWO ); tex3 = SOIL_load_OGL_texture( "tex3.png", SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_INVERT_Y ); tex4 = SOIL_load_OGL_texture( "pantalla2.png", SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_POWER_OF_TWO ); tex5 = SOIL_load_OGL_texture( "pantalla1.png", SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_POWER_OF_TWO ); tex6 = SOIL_load_OGL_texture( "pantalla3.png", SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_POWER_OF_TWO ); srand(time(NULL)); powerups.push_back(Powerup(limites.right +3, random(limites.bottom, limites.top), 0, 70, prev_nivel + randomTime(15000))); powerups.push_back(Powerup(limites.right +3, random(limites.bottom, limites.top), 50, 0, prev_nivel + randomTime(15000))); asteroides.push_back(Asteroide(limites.right +3, random(limites.bottom, limites.top), prev_nivel + randomTime(15000), asteroideModel, 0.3)); asteroides.push_back(Asteroide(limites.right +3, random(limites.bottom, limites.top), prev_nivel + randomTime(15000), asteroideModel, 0.4)); asteroides.push_back(Asteroide(limites.right +3, random(limites.bottom, limites.top), prev_nivel + randomTime(15000), asteroideModel, 0.2)); asteroides.push_back(Asteroide(limites.right +3, random(limites.bottom, limites.top), prev_nivel + randomTime(15000), asteroideModel, 0.2)); asteroides.push_back(Asteroide(limites.right +3, random(limites.bottom, limites.top), prev_nivel + randomTime(15000), asteroideModel, 0.3)); asteroides.push_back(Asteroide(limites.right +3, random(limites.bottom, limites.top), prev_nivel + randomTime(15000), asteroideModel, 0.5)); asteroides.push_back(Asteroide(limites.right +3, random(limites.bottom, limites.top), prev_nivel + randomTime(15000), asteroideModel, 0.3)); asteroides.push_back(Asteroide(limites.right +3, random(limites.bottom, limites.top), prev_nivel + randomTime(15000), asteroideModel, 0.4)); enemigos.push_back(Enemigo(limites.right +3, random(limites.bottom, limites.top), prev_nivel + randomTime(15000), enemigoModel)); enemigos.push_back(Enemigo(limites.right +3, random(limites.bottom, limites.top), prev_nivel + randomTime(15000), enemigoModel)); enemigos.push_back(Enemigo(limites.right +3, random(limites.bottom, limites.top), prev_nivel + randomTime(15000), enemigoModel)); enemigos.push_back(Enemigo(limites.right +3, random(limites.bottom, limites.top), prev_nivel + randomTime(15000), enemigoModel)); player.hp = 100; player.municiones = 100; ammo_length = limites.right * 2; hp_length = limites.right * 2; time_begin = glutGet(GLUT_ELAPSED_TIME); time_fin = time_begin + tiempo_nivel; player.x = limites.left / 2; player.y = 0; player.z = 1; }
void Init() { glClearColor(1.0,1.0,1.0,1.0); glEnable(GL_ALPHA); glEnable(GL_DEPTH_TEST); glEnable(GL_TEXTURE_2D); glEnable(GL_LIGHT0); glEnable(GL_LIGHT1); glEnable(GL_LIGHT2); glEnable(GL_LIGHTING); GLfloat lDiff[] = { 1.0f,1.0f,1.0f,1.0f }; GLfloat lSpec[] = { 0.0f,0.0f,1.0f,1.0f }; GLfloat lpos[] = { 0.0,2.5,0.0,1 }; GLfloat lDiff1[] = { 1.0f,1.0f,1.0f,1.0f }; GLfloat lSpec1[] = { 1.0f,0.0f,0.0f,1.0f }; GLfloat lpos1[] = {0.0f,-2.5,1.0,1 }; GLfloat lDiff2[] = { 1.0f,1.0f,1.0f,1.0f }; GLfloat lSpec2[] = { 1.0f,0.0f,1.0f,1.0f }; GLfloat lpos2[] = { 1.5f,0.0,1.0,1 }; glLightfv(GL_LIGHT0, GL_DIFFUSE, lDiff); glLightfv(GL_LIGHT0, GL_SPECULAR, lSpec); glLightfv(GL_LIGHT0, GL_POSITION, lpos); glLightfv(GL_LIGHT1, GL_DIFFUSE, lDiff1); glLightfv(GL_LIGHT1, GL_SPECULAR, lSpec1); glLightfv(GL_LIGHT1, GL_POSITION, lpos1); glLightfv(GL_LIGHT2, GL_DIFFUSE, lDiff2); glLightfv(GL_LIGHT2, GL_SPECULAR, lSpec2); glLightfv(GL_LIGHT2, GL_POSITION, lpos2); tex1 = SOIL_load_OGL_texture( "tex1.png", SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_POWER_OF_TWO ); tex2 = SOIL_load_OGL_texture( "tex2.png", SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_POWER_OF_TWO ); tex3 = SOIL_load_OGL_texture( "tex3.png", SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_INVERT_Y ); tex4 = SOIL_load_OGL_texture( "pantalla2.png", SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_POWER_OF_TWO ); tex5 = SOIL_load_OGL_texture( "pantalla1.png", SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_POWER_OF_TWO ); tex6 = SOIL_load_OGL_texture( "pantalla3.png", SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_POWER_OF_TWO ); player.model = glmReadOBJ("ship.obj"); asteroideModel = glmReadOBJ("Asteroid.obj"); enemigoModel = glmReadOBJ("rtm_metroid_v2.obj"); time_begin = glutGet(GLUT_ELAPSED_TIME); srand(time(NULL)); powerups.push_back(Powerup(limites.right +3, random(limites.bottom,limites.top), 0, 70, time_begin + randomTime(tiempo_nivel - 5000))); powerups.push_back(Powerup(limites.right +3, random(limites.bottom, limites.top), 50, 0, time_begin + randomTime(tiempo_nivel - 5000))); asteroides.push_back(Asteroide(limites.right +3, random(limites.bottom, limites.top), time_begin + randomTime(tiempo_nivel - 5000),asteroideModel,0.3)); asteroides.push_back(Asteroide(limites.right +3, random(limites.bottom, limites.top), time_begin + randomTime(tiempo_nivel - 5000), asteroideModel,0.4)); asteroides.push_back(Asteroide(limites.right +3, random(limites.bottom, limites.top), time_begin + randomTime(tiempo_nivel - 5000), asteroideModel, 0.3)); asteroides.push_back(Asteroide(limites.right +3, random(limites.bottom, limites.top), time_begin + randomTime(tiempo_nivel - 5000), asteroideModel, 0.5)); asteroides.push_back(Asteroide(limites.right +3, random(limites.bottom, limites.top), time_begin + randomTime(tiempo_nivel - 5000), asteroideModel, 0.3)); asteroides.push_back(Asteroide(limites.right +3, random(limites.bottom, limites.top), time_begin + randomTime(tiempo_nivel - 5000), asteroideModel, 0.4)); enemigos.push_back(Enemigo(limites.right +3, random(limites.bottom, limites.top), time_begin + randomTime(tiempo_nivel-5000), enemigoModel)); enemigos.push_back(Enemigo(limites.right +3, random(limites.bottom, limites.top), time_begin + randomTime(tiempo_nivel - 5000), enemigoModel)); enemigos.push_back(Enemigo(limites.right +3, random(limites.bottom, limites.top), time_begin + randomTime(tiempo_nivel - 5000), enemigoModel)); enemigos.push_back(Enemigo(limites.right +3, random(limites.bottom, limites.top), time_begin + randomTime(tiempo_nivel - 5000), enemigoModel)); ammo_length = limites.right * 2; hp_length = limites.right * 2; time_fin = time_begin + tiempo_nivel; player.x = limites.left/2; player.y = 0; player.z = 1; glutReportErrors(); }
void Game::update(float delta) { for (size_t i = 0; i < delays.size(); i++) { delays[i].time -= delta; if (!delays[i].fired && delays[i].time <= 0.0f) { delays[i].fired = true; delays[i].func(); delays[i] = delays[delays.size() - 1]; delays.pop_back(); i--; } } highestBlock = 0.0f; shakeIntensity = glm::max(0.0f, shakeIntensity - delta * 1.5f); for (int i = 0; i < 2; i++) bound[i] = glm::clamp(bound[i] - delta * 2.0f, 0.0f, 1.0f); for (auto it = powerups.begin(); it != powerups.end(); ++it) { if (it->update(delta)) { *it = powerups.back(); it--; powerups.pop_back(); continue; } } for (auto it = blocks.begin(); it != blocks.end(); ++it) { if (!it->alive) { *it = blocks.back(); it--; blocks.pop_back(); continue; } it->update(delta); } if (glfwGetTime() >= nextBlockSpawn) { scheduleNextBlockSpawn(); std::uniform_int_distribution<> dist(4, 8); std::uniform_real_distribution<> dist2(0.0f, 3150.0f); int count = dist(random); for (int i = 0; i < count; i++) { float x = 50 * glm::round((float)dist2(random) / 50); blocks.push_back(Block(this, glm::vec2(x, highestBlock -1050.0f))); } } if (glfwGetTime() >= nextPowerupSpawn) { scheduleNextPowerupSpawn(); powerups.push_back(Powerup(this)); } glm::vec2 pos_min, pos_max; bool pos_one = false; //for (auto it = players.begin(); it != players.end(); ++it) for (size_t i = 0; i < players.size(); i++) { Player *it = &*players[i]; if (!it->dead) { glm::vec2 pos = it->getPosition(); if (!pos_one) { pos_min = pos; pos_max = pos; pos_one = true; } else { pos_min = glm::min(pos_min, pos); pos_max = glm::max(pos_max, pos); } it->update(delta); } else if (glfwGetTime() - it->deathTime >= 3.0f) it->resetFinish(); } for (auto it = particles.begin(); it != particles.end(); ++it) { if (it->duration <= 0.0f) { *it = particles.back(); it--; particles.pop_back(); continue; } it->update(delta); } if (pos_one) { int width, height; glfwGetWindowSize(window, &width, &height); //camera.pos_dest.x = (pos_min.x + pos_max.x) / 2.0f - width / 2.0f + 25.0f; //camera.pos_dest.y = (pos_min.y + pos_max.y) / 2.0f - height / 2.0f + 25.0f; camera.pos_dest.x = (pos_min.x + pos_max.x) / 2.0f + 25.0f; camera.pos_dest.y = (pos_min.y + pos_max.y) / 2.0f + 25.0f; //camera.pos_dest.y = 1000.0f - height; camera.scale_dest = glm::min(1.0f, (width - 200) / glm::abs(pos_min.x - pos_max.x)); camera.pos -= (camera.pos - camera.pos_dest) * delta * camera.speed; camera.scale -= (camera.scale - camera.scale_dest) * delta * camera.speed; } fmod->update(); }
Powerup::Powerup(Ogre::Vector3 spawnAt, int poolIndex) { Powerup((PowerupType)(rand() % POWERUP_COUNT), spawnAt, poolIndex); }