void Game::setZoom(){ View camara; camara.setSize(100.0f, 100.0f); camara.setCenter(50.0f, 50.0f); pWnd->setView(camara); }
void Renderer::drawSprites() { View v = window->getView(); v.setRotation ( camera->rotation ); v.setCenter ( dimX / 2 + camera->pos.x , dimY / 2 + camera->pos.y ); v.setSize ( dimX / camera->zoom, dimY / camera->zoom ); window->setView ( v ); // v.setSize() // view.setCenter( , camera->pos.y); // view = View(Vector2f( dimX/2 + camera->pos.x ,dimY/2 + camera->pos.y ),Vector2f(dimX,dimY)); //std::cout<<view.getCenter().x<<std::endl; for ( DrawableType * type : sprites ) { DrawableSprite* s = dynamic_cast<DrawableSprite*>(type->getSprite()); if ( s != 0 ) { s->update ( 0 ); window->draw ( *s ); } else { std::cout << "Attempting to draw null object" << std::endl; } } for ( auto x : debugDraw ) { window->draw ( *x ); } }
void Entity::updateView(View &view , Listener &listener , RenderWindow &window) { Vector2u sizeWindow = window.getSize(); //sizeWindow.x /= 1.f;//SCALE_VIEW //sizeWindow.y /= 1.f;// TODO : increase zoom for camera, reason: small image view.setSize(Vector2f(sizeWindow)); float tempX = getXPos(); float tempY = getYPos(); listener.setPosition(tempX, tempY, 0); float x = getXPos(); float y = getYPos(); int leftBorder = sizeWindow.x / 2; int rightBorder = SIZE_BLOCK * (WIDTH_MAP - BORDER1) - sizeWindow.x / 2; int topBorder = sizeWindow.y / 2; int lowBorder = SIZE_BLOCK * LONG_MAP - sizeWindow.y / 2; if (int(x) < leftBorder) tempX = float(leftBorder); else if (int(x) > rightBorder) tempX = float(rightBorder); if (int(y) < topBorder) tempY = float(topBorder); else if (int(y) > lowBorder) tempY = float(lowBorder); view.setCenter(tempX, tempY); }
void KrecikApp::updateCar(Time elapsed) { // ruch kołami float spd = cc.motorSpeed; // [dg/s] Body* car = this->getBody("car"); b2WheelJoint* left = this->getJoint<b2WheelJoint>(car, this->getBody("left wheel")); b2WheelJoint* right = this->getJoint<b2WheelJoint>(car, this->getBody("right wheel")); if(Keyboard::isKeyPressed(Keyboard::Up)) { left->SetMotorSpeed(DGtoRD(spd)); right->SetMotorSpeed(DGtoRD(spd)); } else if(Keyboard::isKeyPressed(Keyboard::Down)) { left->SetMotorSpeed(-DGtoRD(spd)); right->SetMotorSpeed(-DGtoRD(spd)); } else { left->SetMotorSpeed(0.0f); right->SetMotorSpeed(0.0f); } // obrót! float angle = RDtoDG(car->b->GetAngle()); if(angle > 360.0f) { car->b->SetTransform(car->b->GetPosition(), DGtoRD(angle - 360.0f)); dispBonusMsg(L"Obrót!\n +50"); pts += 50; } if(angle < -360.0f) { car->b->SetTransform(car->b->GetPosition(), DGtoRD(angle + 360.0f)); dispBonusMsg(L"Obrót!\n +50"); pts += 50; } // skok i mega skok if(lastTouch.getElapsedTime() >= seconds(1.5f)) { if(isContact(car, getBody("ground"))) lastTouch.restart(); else { dispBonusMsg(L"Skok!\n +70"); pts += 70; lastTouch.restart(); } } // ustaw widok View v = this->win.getView(); v.setCenter(getCarPos()); this->win.setView(v); }
View setPlayerCoordinateForView(View &camera, float x, float y) { float tempX = x; float tempY = y; if (x < 320) tempX = 320; if (y < 240) tempY = 240; if (y > 720) tempY = 720; camera.setCenter(tempX, tempY); return camera; }
void world::initializePlayer(View &view , Listener &listener) { mainPerson = &Enemys[ID_PLAYER_IN_LIST]; Vector2f centerView = { float(CENTER_WORLD.x * SIZE_BLOCK), float(CENTER_WORLD.y * SIZE_BLOCK) }; view.setSize(float(DEFAULT_WIDTH_WINDOW), float(DEFAULT_HEIGHT_WINDOW)); view.setCenter(centerView); listener.setUpVector(0.f, 1.f, 0.f); listener.setGlobalVolume(100.f); }
void RenderComponentManager::drawGuiComponents() { View view = window.getView(); View defaultView = window.getDefaultView(); defaultView.setCenter(math::Vec3f(window.getSize().x * 0.5f, window.getSize().y * 0.5f, 0)); window.setView(defaultView); std::multimap<unsigned int, Component*, std::greater<unsigned int>>::iterator it; for (it = components.begin(); it != components.end(); it++) { if (dynamic_cast<LightComponent*>(it->second) != nullptr && it->second->isVisible()) { static_cast<LightComponent*>(it->second)->checkSubWindowEvents(); it->second->getWindow().draw(*it->second); } } window.setView(view); }
void FastRenderComponentManager::drawGuiComponents() { View view = window.getView(); View defaultView = window.getDefaultView(); defaultView.setCenter(math::Vec3f(window.getSize().x * 0.5f, window.getSize().y * 0.5f, 0)); window.setView(defaultView); for (unsigned int i = 0; i < components.size(); i++) { if (getRenderComponent(i) == nullptr) { static_cast<LightComponent*>(components[i])->checkSubWindowEvents(); if (getGuiComponent(i)->isVisible()) window.draw(*components[i]); } } window.setView(view); }
void Bird::control_bird(Bird &bird, float time, GameState &gameState, Sprite &birdSprite, View &view) { if ((Keyboard::isKeyPressed(Keyboard::Space))) { bird.speed.y = float(-0.1); } bird.coord += bird.speed * time; view.setCenter(bird.coord.x, 0); bird.speed.y = bird.speed.y + float(0.0005*time); gameState.current_frame += float(0.0009*time); if (gameState.current_frame > 2) { gameState.current_frame -= 2; } birdSprite.setTextureRect(IntRect(60 * int(gameState.current_frame), 0, 55, 50)); birdSprite.setPosition(bird.coord.x, bird.coord.y); get_player_coordinate_for_view(bird.coord.x, bird.coord.y, view); view_map(time, view); }
void Track::control_track(Track &track, float time, GameState &gameState, Sprite &trackSprite, View &view) { if ((Keyboard::isKeyPressed(Keyboard::Space))) { track.speed.y = float(-0.1); } track.coord_track += track.speed * time; view.setCenter(track.coord_track.x, 0); track.speed.y = track.speed.y + float(0.0005*time); gameState.current_frame += float(0.0009*time); if (gameState.current_frame > 2) { gameState.current_frame -= 2; } trackSprite.setTextureRect(IntRect(37 * int(gameState.current_frame), 0, 37, 36)); trackSprite.setPosition(track.coord_track.x, track.coord_track.y); get_player_coordinate_for_view(track.coord_track.x, track.coord_track.y, view); view_map(time, view); }
View UpdateView(RenderWindow & window, Sprite & hero, View & view, int & level) //UpdateCameraPosition { /* Vector2f temp = hero.getPosition(); Vector2i WIN_SIZE; Vector2i TILE_SIZE; if (level == 0) { WIN_SIZE = WINDOW_SIZE; TILE_SIZE = TILEMAP_SIZE; } else { WIN_SIZE = { (LEVEL_BOSS_SIZE.x + 2) * STEP_TILE, (LEVEL_BOSS_SIZE.y + 2) * STEP_TILE }; TILE_SIZE = { LEVEL_BOSS_SIZE.x + 2, LEVEL_BOSS_SIZE.y + 2 }; } if (temp.x < float(WIN_SIZE.x) / 2.f) temp.x = float(WIN_SIZE.x) / 2.f; else if (TILE_SIZE.x * STEP_TILE - float(WIN_SIZE.x) / 2.f < temp.x) temp.x = (TILE_SIZE.x * STEP_TILE - float(WIN_SIZE.x) / 2.f); if (temp.y < float(WIN_SIZE.y) / 2.f) temp.y = float(WIN_SIZE.y) / 2.f; else if (TILE_SIZE.y * STEP_TILE - float(WIN_SIZE.y) / 2.f < temp.y) temp.y = (TILE_SIZE.y * STEP_TILE - float(WIN_SIZE.y) / 2.f); view.setCenter(temp); window.setView(view); return view; */ Vector2f temp = hero.getPosition(); if (temp.x < float(WINDOW_SIZE.x) / 2.f) temp.x = float(WINDOW_SIZE.x) / 2.f; else if (TILEMAP_SIZE.x * STEP_TILE - float(WINDOW_SIZE.x) / 2.f < temp.x) temp.x = (TILEMAP_SIZE.x * STEP_TILE - float(WINDOW_SIZE.x) / 2.f); if (temp.y < float(WINDOW_SIZE.y) / 2.f) temp.y = float(WINDOW_SIZE.y) / 2.f; else if (TILEMAP_SIZE.y * STEP_TILE - float(WINDOW_SIZE.y) / 2.f < temp.y) temp.y = (TILEMAP_SIZE.y * STEP_TILE - float(WINDOW_SIZE.y) / 2.f); view.setCenter(temp); window.setView(view); return view; };
View getViewCoords(double x, double y) { double tempX = x; double tempY = y; if (x < view.getSize().x / 2) { tempX = view.getSize().x / 2; } if (x >(mapWidth - view.getSize().x * 0.5)) { tempX = mapWidth - view.getSize().x * 0.5; } if (y < view.getSize().y / 2) { tempY = view.getSize().y / 2; } if (y >(mapHeight - view.getSize().y * 0.5)) { tempY = mapHeight - view.getSize().y * 0.5; } view.setCenter(tempX, tempY); return view; }
void Game::gra() { srand(time(0)); /////////////////////////////// Texture tekstura_cel; //wczytanie tekstur i dzwiêków i tekstów tekstura_cel.loadFromFile("data/cel.png"); Texture tekstura_z; tekstura_z.loadFromFile("data/zombie_after_attack_rect.png"); Texture tekstura; tekstura.loadFromFile("data/ground.png"); Texture tekstura_bl; tekstura_bl.loadFromFile("data/blood.png"); Texture tekstura_zombie_bl; tekstura_zombie_bl.loadFromFile("data/zombie_after_attack_rect.png"); Texture tekstura_zombie_aa; tekstura_zombie_aa.loadFromFile("data/zombie_after_attack_rect.png"); Texture tekstura_zombie_full; tekstura_zombie_full.loadFromFile("data/zombie_after_attack_rect.png"); Texture tekstura_gun; tekstura_gun.loadFromFile("data/gun.png"); Texture tekstura_bullet; Texture tekstura_floor; tekstura_floor.loadFromFile("data/floor.png"); Texture tekstura_ak_47; tekstura_ak_47.loadFromFile("data/ak_47.png"); tekstura_bullet.loadFromFile("data/bullet.png"); Texture tekstura_corps; tekstura_corps.loadFromFile("data/corps.png"); Texture tekstura_ammo; tekstura_ammo.loadFromFile("data/ammo_pickup.png"); Texture tekstura_hp; tekstura_hp.loadFromFile("data/hp_pickup.png"); Texture tekstura_wall; tekstura_wall.loadFromFile("data/wall.jpg"); tekstura_wall.setRepeated(true); SoundBuffer buffer, buffer_z; buffer_z.loadFromFile("data/hit.wav"); buffer.loadFromFile("data/shot.wav"); Sound sound, sound_hit; sound.setBuffer(buffer); sound_hit.setBuffer(buffer_z); SoundBuffer zombie_bite; zombie_bite.loadFromFile("data/zombie_bite.wav"); Sound sound_bite; sound_bite.setBuffer(zombie_bite); SoundBuffer reload_wav, ammo_out; reload_wav.loadFromFile("data/long_reload.wav"); ammo_out.loadFromFile("data/out_of_ammo.wav"); SoundBuffer health_wav, ammo_wav; health_wav.loadFromFile("data/health.wav"); ammo_wav.loadFromFile("data/ammo.wav"); Sound health_collect, ammo_collect; health_collect.setBuffer(health_wav); ammo_collect.setBuffer(ammo_wav); SoundBuffer ak_shot; ak_shot.loadFromFile("data/AK_47_shot.wav"); Sound ak; ak.setBuffer(ak_shot); Sound sound_reload, sound_ammo_out; sound_reload.setBuffer(reload_wav); sound_ammo_out.setBuffer(ammo_out); Music muzyka; muzyka.openFromFile("data/COD4_theme.wav"); muzyka.setLoop(true); muzyka.play(); Font font; font.loadFromFile("data/font_UI.ttf"); Text hp; hp.setFont(font); hp.setCharacterSize(25); hp.setColor(Color(138, 7, 7)); Text round; round.setCharacterSize(25); round.setFont(font); round.setColor(Color(138, 7, 7)); Text gun_name; gun_name.setCharacterSize(25); gun_name.setFont(font); gun_name.setColor(Color(138, 7, 7)); Text bullets_Left; bullets_Left.setFont(font); bullets_Left.setCharacterSize(25); bullets_Left.setColor(Color(138, 7, 7)); Text licznik_zombie; licznik_zombie.setFont(font); licznik_zombie.setCharacterSize(25); licznik_zombie.setColor(Color(138, 7, 7)); //////////////////////////////// Sprite celownik; celownik.setScale(0.045, 0.045); celownik.setTexture(tekstura_cel); celownik.setOrigin(celownik.getLocalBounds().width/2.0f, celownik.getLocalBounds().height/ 2.0f); RectangleShape sprint_ui; sprint_ui.setSize(Vector2f(15 * 5, 15)); sprint_ui.setFillColor(Color(138, 7, 7)); /////////////////////////// tablice obiektów vector<Blood> tab_bl; vector < Bullet > tab; //tablica przechowuj¹ca pociski vector <Zombie> tab_z; //zombie deque <Vector2f> tab_p;//pozycje gracza z ostatnich 100 klatek vector <Corps> tab_corps; vector <Ammo_Pickup> tab_am; vector <Hp_Pickup> tab_hp; Sprite map(tekstura); tekstura.setRepeated(true); map.setTextureRect(IntRect(0, 0, 10000, 10000)); map.setOrigin(5000,5000); map.setPosition(0, 0); Sprite floor; floor.setPosition(-500, -480); floor.setTexture(tekstura_floor); tekstura_floor.setRepeated(true); floor.setTextureRect(IntRect(0, 0, 1000, 980)); vector<RectangleShape> tab_wall; for (int i = 0; i < 12; i++) { RectangleShape wall; wall.setFillColor(Color(7, 138, 7, 100)); if (i == 0) { wall.setPosition(-1000, -1000); //wall.setFillColor(Color::White); } else if (i == 1) { wall.setPosition(-1000, 1000); //wall.setFillColor(Color::Red); } else if (i == 2) { wall.setPosition(-1100, -1000); //wall.setFillColor(Color::Cyan); } else if (i == 3) { //wall.setOrigin(100, 0); wall.setPosition(1000, -1000); //wall.setFillColor(Color::Blue); } if (i == 0 || i == 1)wall.setSize(Vector2f(2000, 100)); else if (i == 2 || i == 3)wall.setSize(Vector2f(100, 2100)); if (i == 4) { wall.setPosition(-500,-500); } else if (i == 5) { wall.setPosition(-520,500); } else if (i == 6) { wall.setPosition(-520, -500); } else if (i == 7) { wall.setPosition(500, -500); } if (i == 4 || i == 5)wall.setSize(Vector2f(1020, 20)); else if (i == 6 || i == 7)wall.setSize(Vector2f(20, 1020)); if (i == 8) { wall.setPosition(-100, -489); wall.setFillColor(Color(138, 7, 7, 150)); } else if (i == 9) { wall.setPosition(-100, 510); wall.setFillColor(Color(138, 7, 7, 150)); } else if (i == 10) { wall.setPosition(-509, -100); wall.setFillColor(Color(138, 7, 7, 150)); } else if (i == 11) { wall.setPosition(510, -100); wall.setFillColor(Color(138, 7, 7,150)); } if (i == 8 || i == 9)wall.setSize(Vector2f(100, 6)); else if (i == 10 || i == 11)wall.setSize(Vector2f(6, 100)); if (i == 8 || i == 9 || i == 10 || i == 11)wall.setOrigin(wall.getLocalBounds().width / 2.0f, wall.getLocalBounds().height / 2.0f); tab_wall.push_back(wall); } Player gracz; gracz.body.setPosition(0,0); int runda = 1; float vx = 0, vy = 0; //prêdkoæ gracza float angle; float sprint = 1; Clock zombie_player_collisionTimer; Clock reload_time; Clock zombie_generator_timer; Clock zegar; Time czas; Event event; float x, y; //x,y myszy okno.setMouseCursorVisible(false); int max_zombie_per_round; int generated_zombie=0; bool generate = true; bool menu = false; bool canReload = false; bool canShoot = true; bool Rpressed = false; bool isSprint = false; bool canSprint = true; int zombies_killed_in_round = 0; zombie_generator_timer.restart(); Gun *wsk_gun; Gun pistol("colt .45", 80.0f,16.0f,2000.0f,2.0f,tekstura_bullet, tekstura_gun,Vector2f(2,2), Vector2f (1,1),gracz.body.getPosition(),0.1); Gun ak_47("ak 47", 120.0f, 30.0f, 2800.0f, 2.0f, tekstura_bullet, tekstura_ak_47, Vector2f(2, 2), Vector2f(1, 1), gracz.body.getPosition(),0.08f); //view.zoom(1.0f/1.2f); //view.zoom(1.0f / 1.2f); wsk_gun = &pistol; while (!menu) { //cout << tab_z.size() << " | "<< wsk_gun->bullets_fired.size() <<endl; gracz.canMoveDown = true; gracz.canMoveUP= true; gracz.canMoveRight = true; gracz.canMoveLeft = true; max_zombie_per_round = runda * 4 * 7 ; if (generated_zombie >= max_zombie_per_round) { generate = false; } if (!generate&&tab_z.empty()) { zombies_killed_in_round = 0; generated_zombie = 0; generate = true; runda++; } if (generate && (zombie_generator_timer.getElapsedTime().asSeconds() >= 1.0f)) { zombie_generator_timer.restart(); if (tab_z.size() <=20) { generated_zombie += 4; zombie_generator(tab_z, Vector2f((tab_wall[0].getPosition().x + rand() % ((int)tab_wall[0].getGlobalBounds().width + 1)), (tab_wall[0].getPosition().y + tab_wall[0].getGlobalBounds().height)), tekstura_z, runda, tab_wall[8].getPosition()); zombie_generator(tab_z, Vector2f((tab_wall[1].getPosition().x + rand() % ((int)tab_wall[1].getGlobalBounds().width + 1)), (tab_wall[1].getPosition().y + tab_wall[1].getGlobalBounds().height)), tekstura_z, runda, tab_wall[9].getPosition()); zombie_generator(tab_z, Vector2f((tab_wall[2].getPosition().x + tab_wall[2].getGlobalBounds().width), (tab_wall[2].getPosition().y + rand() % ((int)tab_wall[2].getGlobalBounds().height + 1))), tekstura_z, runda, tab_wall[10].getPosition()); zombie_generator(tab_z, Vector2f((tab_wall[3].getPosition().x + tab_wall[3].getGlobalBounds().width), (tab_wall[3].getPosition().y + rand() % ((int)tab_wall[3].getGlobalBounds().height + 1))), tekstura_z, runda, tab_wall[11].getPosition()); /*zombie_generator(tab_z, Vector2f((tab_wall[0].getPosition().x + rand() % ((int)tab_wall[0].getGlobalBounds().width + 1)), (tab_wall[0].getPosition().y + tab_wall[0].getGlobalBounds().height)), tekstura_z, runda, Vector2f(0,0)); zombie_generator(tab_z, Vector2f((tab_wall[1].getPosition().x + rand() % ((int)tab_wall[1].getGlobalBounds().width + 1)), (tab_wall[1].getPosition().y + tab_wall[1].getGlobalBounds().height)), tekstura_z, runda, Vector2f(0,0)); zombie_generator(tab_z, Vector2f((tab_wall[2].getPosition().x + tab_wall[2].getGlobalBounds().width), (tab_wall[2].getPosition().y + rand() % ((int)tab_wall[2].getGlobalBounds().height + 1))), tekstura_z, runda, Vector2f(0,0)); zombie_generator(tab_z, Vector2f((tab_wall[3].getPosition().x + tab_wall[3].getGlobalBounds().width), (tab_wall[3].getPosition().y + rand() % ((int)tab_wall[3].getGlobalBounds().height + 1))), tekstura_z, runda, Vector2f(0,0)); */ } /*else { generated_zombie += 4; zombie_generator(tab_z, Vector2f((tab_wall[4].getPosition().x + rand() % ((int)tab_wall[4].getGlobalBounds().width + 1)), (tab_wall[4].getPosition().y + tab_wall[4].getGlobalBounds().height)), tekstura_z, runda); zombie_generator(tab_z, Vector2f((tab_wall[5].getPosition().x + rand() % ((int)tab_wall[5].getGlobalBounds().width + 1)), (tab_wall[5].getPosition().y + tab_wall[5].getGlobalBounds().height)), tekstura_z, runda); zombie_generator(tab_z, Vector2f((tab_wall[6].getPosition().x + tab_wall[6].getGlobalBounds().width), (tab_wall[6].getPosition().y + rand() % ((int)tab_wall[6].getGlobalBounds().height + 1))), tekstura_z, runda); zombie_generator(tab_z, Vector2f((tab_wall[7].getPosition().x + tab_wall[7].getGlobalBounds().width), (tab_wall[7].getPosition().y + rand() % ((int)tab_wall[7].getGlobalBounds().height + 1))), tekstura_z, runda); }*/ } view.setCenter(gracz.body.getPosition()); //gracz ca³y czas w centrum widoku x = (float)Mouse::getPosition(okno).x+view.getCenter().x-1280/2, y = (float)Mouse::getPosition(okno).y+view.getCenter().y-720/2; //zapisanie pozycji myszy wzglêdem lewgo górnego rogu widoku celownik.setPosition(x, y); //przypisanie pozycji celownika angle = (float)atan2((float)(y - gracz.body.getPosition().y), (float)(x - gracz.body.getPosition().x)) * 180.0f / (float)M_PI - 90.0f; //zapisanie k¹t miêdzy rodkiem ekranu a pozycj¹ myszy gracz.body.setRotation(angle); //obrócenie gracza w kierunku myszy cout <<x << " | "<< y << endl; ///////////////////////////// if (tab_p.size() != 30) //wype³nienie tablicy pozycjami gracza z ostatnich stu klatek (czyli 1 sekundy) tab_p.push_back(gracz.body.getPosition()); if (tab_p.size() == 30) { tab_p.pop_front(); tab_p.push_back(gracz.body.getPosition()); } /////////////////////////////// while (okno.pollEvent(event)) { if (event.type == Event::Closed || event.type == Event::KeyPressed && event.key.code == Keyboard::Escape) menu = true; //if (event.type == Event::MouseButtonPressed && Mouse::isButtonPressed(Mouse::Right))//stworzenie zombie i dodanie go do tablicy //{ // Zombie zombie(x, y, tekstura_z,rand()%51+50, 1+runda); // tab_z.push_back(zombie); //} if (wsk_gun==&pistol) { if (event.type == Event::MouseButtonPressed && Mouse::isButtonPressed(Mouse::Left))//stworzenie pocisku i dodanie go do tablicy { if (wsk_gun->magazynek == 0) { sound_ammo_out.play(); if (wsk_gun->bulletsLeft != 0 && !wsk_gun->reload_demand&& !wsk_gun->reloading) { sound_reload.play(); wsk_gun->reload_demand = true; } } else if (!wsk_gun->reloading) { sound.play(); wsk_gun->shoot(gracz.body.getPosition()); wsk_gun->magazynek--; } else { sound_ammo_out.play(); } } } if (event.type == Event::MouseButtonPressed && Mouse::isButtonPressed(Mouse::Left) && (wsk_gun->magazynek == 0 || wsk_gun->reloading || wsk_gun->reload_demand)) sound_ammo_out.play(); if (event.type == Event::KeyPressed && event.key.code == Keyboard::R && wsk_gun->bulletsLeft != 0 && wsk_gun->magazynek != wsk_gun->magazynekSize &&!wsk_gun->reloading&& !wsk_gun->reload_demand) { wsk_gun->reload_demand = true; sound_reload.play(); } if (event.type == Event::KeyPressed && event.key.code == Keyboard::Num1) { wsk_gun = &pistol; //buffer = wsk_gun->shot; } if (event.type == Event::KeyPressed && event.key.code == Keyboard::Num2) { wsk_gun = &ak_47; //buffer = wsk_gun->shot; } if (event.type == Event::KeyPressed && event.key.code == Keyboard::Up)view.zoom(1.2f); if (event.type == Event::KeyPressed && event.key.code == Keyboard::Down)view.zoom(1.0f/1.2f); } /////// strza³ pistoletem if (wsk_gun != &pistol) { if (wsk_gun->fire_timer.getElapsedTime().asSeconds() >= wsk_gun->fireRate) { if (Mouse::isButtonPressed(Mouse::Left))//stworzenie pocisku i dodanie go do tablicy { if (wsk_gun->magazynek == 0) { if (wsk_gun->bulletsLeft != 0 && !wsk_gun->reload_demand&& !wsk_gun->reloading) { sound_reload.play(); wsk_gun->reload_demand = true; } } else if (!wsk_gun->reloading) { sound.play(); wsk_gun->shoot(gracz.body.getPosition()); wsk_gun->magazynek--; } /*else { sound_ammo_out.play(); }*/ } wsk_gun->fire_timer.restart(); } } wsk_gun->update(angle, czas, gracz.body.getPosition()); if(!tab_z.empty())//zombie update { for (int i = 0; i < tab_z.size(); i++) tab_z[i].update(gracz.body.getPosition(), czas,tab_p[0]); } //if (!tab.empty())//obrócenie zombie w kierunku pozycji gracz z przed sekundy //{ // for (int i = 0; i < tab.size(); i++) // tab[i].rotate(); //} //////////////////////////////////////kolizja // kolizja zombie-gracz for (int i = 0; i < tab_z.size(); i++) { //if(gracz.body.getGlobalBounds().intersects(tab_z[i].body.getGlobalBounds())) if (Collision::PixelPerfectTest(gracz.body, tab_z[i].body)) { tab_z[i].collidesWithPlayer = true; if ((tab_z[i].body.getPosition().y > gracz.body.getPosition().y >0) || (gracz.body.getPosition().y <tab_z[i].body.getPosition().y <0)) { gracz.canMoveDown = false; //gracz.body.move(0, -1); } if ((gracz.body.getPosition().y >tab_z[i].body.getPosition().y >0) || (tab_z[i].body.getPosition().y < gracz.body.getPosition().y <0)) { gracz.canMoveUP = false; //gracz.body.move(0, 1); } if ((tab_z[i].body.getPosition().x > gracz.body.getPosition().x >0)||(gracz.body.getPosition().x <tab_z[i].body.getPosition().x <0)) { gracz.canMoveRight = false; //gracz.body.move(-1, 0); } if ((gracz.body.getPosition().x >tab_z[i].body.getPosition().x >0)||(tab_z[i].body.getPosition().x < gracz.body.getPosition().x <0)) { gracz.canMoveLeft = false; //gracz.body.move(1, 0); } if (zombie_player_collisionTimer.getElapsedTime().asSeconds() >= 0.5) { zombie_player_collisionTimer.restart(); sound_bite.play(); //cout << gracz.healthPoints << endl; if (tab_z[i].healthPoints < 3)tab_z[i].body.setTexture(tekstura_zombie_full); else tab_z[i].body.setTexture(tekstura_zombie_aa); tab_z[i].haveAttacked = true; gracz.healthPoints--; if (gracz.healthPoints == 0) { menu = true; } break; } } else tab_z[i].collidesWithPlayer = false; } // kolizja zombie-zombie if (!tab_z.empty()) { for (int i = 0; i < tab_z.size(); i++) { for (int j = 0; j < tab_z.size(); j++) { if (i != j) { //if (tab_z[j].body.getGlobalBounds().intersects( tab_z[i].body.getGlobalBounds())) if (Collision::PixelPerfectTest(tab_z[j].body, tab_z[i].body)) { if (fabs(tab_z[i].body.getPosition().x - gracz.body.getPosition().x) + fabs(tab_z[i].body.getPosition().y - gracz.body.getPosition().y) >fabs(tab_z[j].body.getPosition().x - gracz.body.getPosition().x) + fabs(tab_z[j].body.getPosition().y - gracz.body.getPosition().y)) { tab_z[i].collide_parameter = 0; tab_z[j].collide_parameter = 1.2; } else { tab_z[j].collide_parameter = 0; tab_z[i].collide_parameter = 1.2; } tab_z[i].col_in = true; tab_z[j].col_in = true; break; } } } } } // kolizja gracz-ciana if (tab_wall[4].getGlobalBounds().intersects(gracz.body.getGlobalBounds())) { gracz.canMoveUP = false; sprint = 1; //vx = 0; //gracz.body.move(0, 1); //gracz.canMoveUP = true; } if (tab_wall[5].getGlobalBounds().intersects(gracz.body.getGlobalBounds())) { sprint = 1; gracz.canMoveDown = false; //vx = 0; //gracz.body.move(0, -1); //gracz.canMoveDown = true; } if (tab_wall[6].getGlobalBounds().intersects(gracz.body.getGlobalBounds())) { sprint = 1; gracz.canMoveLeft = false; //vy = 0; //gracz.body.move(1, 0); //gracz.canMoveRight = true; } if (tab_wall[7].getGlobalBounds().intersects(gracz.body.getGlobalBounds())) { sprint = 1; gracz.canMoveRight= false; //vy = 0; //gracz.body.move(-1, 0); //gracz.canMoveLeft = true; } ///////////kolizja zombie pocisk if (!tab_z.empty() && !wsk_gun->bullets_fired.empty()) //zniszczenie pocisku i zombie w przypadku kolizji { for (int i = 0; i < wsk_gun->bullets_fired.size(); i++) { for (int j = 0; j < tab_z.size(); j++) { if (wsk_gun->bullets_fired[i].body.getGlobalBounds().intersects(tab_z[j].body.getGlobalBounds())) { sound_hit.play(); bullet_destroy(wsk_gun->bullets_fired, i); Blood krew(tekstura_bl, tab_z[j].body.getPosition()); krew.body.setRotation((rand() % 360) + 1); tab_bl.push_back(krew); tab_z[j].healthPoints--; if (tab_z[j].healthPoints == 1) { tab_z[j].setSpeed(80.0f); if (tab_z[j].haveAttacked == true)tab_z[j].body.setTexture(tekstura_zombie_full); else tab_z[j].body.setTexture(tekstura_zombie_bl); } if (tab_z[j].healthPoints == 0) { //mieræ zombie Corps corpses(tekstura_corps, tab_z[j].body.getPosition(), tab_z[j].rotate_angle); tab_corps.push_back(corpses); if (tab_z[j].isInside) { Ammo_Pickup am(tekstura_ammo, tab_z[j].body.getPosition()); Hp_Pickup hp(tekstura_hp, tab_z[j].body.getPosition()); switch (rand() % 10) { case 0: tab_am.push_back(am); break; case 1: tab_am.push_back(am); break; case 5: if (gracz.healthPoints < 5)tab_hp.push_back(hp); break; } } tab_z[j] = tab_z[tab_z.size() - 1]; tab_z.pop_back(); zombies_killed_in_round++; } break; } } } } //kolizja gracz-ammo_pickup for (int i = 0; i < tab_am.size(); i++) { if (gracz.body.getGlobalBounds().intersects(tab_am[i].body.getGlobalBounds())) { ammo_collect.play(); wsk_gun->bulletsLeft += tab_am[i].add_ammo; ammo_destroy(tab_am, i); } } //kolizja gracz-hp_pickup for (int i = 0; i < tab_hp.size(); i++) { if (gracz.body.getGlobalBounds().intersects(tab_hp[i].body.getGlobalBounds())) { if (gracz.healthPoints + tab_hp[i].add_hp <= 5) { health_collect.play(); gracz.healthPoints += tab_hp[i].add_hp; hp_destroy(tab_hp, i); } } } //////////////////////////////////////// for (int j = 4; j < tab_wall.size()-4;j++) for (int i = 0; i < wsk_gun->bullets_fired.size(); i++) { if (wsk_gun->bullets_fired[i].body.getGlobalBounds().intersects(tab_wall[j].getGlobalBounds())) bullet_destroy(wsk_gun->bullets_fired, i); } for (int j = 8; j < tab_wall.size(); j++) for (int i = 0; i < tab_z.size(); i++) if (tab_z[i].body.getGlobalBounds().intersects(tab_wall[j].getGlobalBounds()))tab_z[i].isInside = true; for (int i = 0; i < wsk_gun->bullets_fired.size(); i++) { if (wsk_gun->bullets_fired[i].onCreate_clock.getElapsedTime().asSeconds() >= wsk_gun->bullets_fired[i].lifeTime) { bullet_destroy(wsk_gun->bullets_fired, i); } } for (int i = 0; i < tab_bl.size(); i++) { if (tab_bl[i].onCreate_clock.getElapsedTime().asSeconds() >= tab_bl[i].lifeTime) { blood_destroy(tab_bl, i); } } for (int i = 0; i < tab_corps.size(); i++) { if (tab_corps[i].onCreate_clock.getElapsedTime().asSeconds() >= tab_corps[i].lifeTime) { corps_destroy(tab_corps, i); } } for(int i = 0; i < tab_am.size(); i++) { if (tab_am[i].onCreate_clock.getElapsedTime().asSeconds() >= tab_am[i].lifeTime) { ammo_destroy(tab_am, i); } } for (int i = 0; i < tab_hp.size(); i++) { if (tab_hp[i].onCreate_clock.getElapsedTime().asSeconds() >= tab_hp[i].lifeTime) { hp_destroy(tab_hp, i); } } /////////////////////////////////////////// interfejs(gracz.healthPoints, wsk_gun->bulletsLeft, hp, bullets_Left, view.getCenter(), wsk_gun->magazynek, runda, round, max_zombie_per_round - zombies_killed_in_round, licznik_zombie, gun_name, wsk_gun->name, sprint_ui, isSprint&&(tab_p[0]!=gracz.body.getPosition()), czas); okno.setView(view); okno.clear(); //cout << "Up: " << gracz.canMoveUP << " | Down: " << gracz.canMoveDown << " | Left: " << gracz.canMoveLeft << " | Right: " << gracz.canMoveRight << endl; ///////////////////////////////////////////////////// gracz.input(vx, vy); if (Keyboard::isKeyPressed(Keyboard::LShift) && canSprint) { if (sprint_ui.getSize().x < 1) { canSprint = false; } sprint = 1.5; isSprint = true; } else { if (sprint_ui.getSize().x >15) { canSprint = true; } sprint = 1; isSprint = false; } ////////////////////////////////////// // ruch // gracz.ruch(czas, vx, vy, sprint); /*if (!tab_z.empty()) { for (int i = 0; i < tab_z.size(); i++) { tab_z[i].ruch(tab_p[0], czas); } }*/ //////////////////////////////// okno.draw(map); //rysowanie okno.draw(floor); if (!wsk_gun->bullets_fired.empty()) { for (int i = 0; i <wsk_gun->bullets_fired.size(); i++) if (!gracz.body.getGlobalBounds().intersects(wsk_gun->bullets_fired[i].body.getGlobalBounds())) okno.draw(wsk_gun->bullets_fired[i].body); } if (!tab_bl.empty()) { for (int i = 0; i < tab_bl.size(); i++) { okno.draw(tab_bl[i].body); //okno.draw(tab_bl[i].rect); } } if (!tab_corps.empty()) { for (int i = 0; i < tab_corps.size(); i++) okno.draw(tab_corps[i].body); } if (!tab_am.empty()) { for (int i = 0; i < tab_am.size(); i++) { if(tab_am[i].onCreate_clock.getElapsedTime().asSeconds() < tab_am[i].lifeTime-8.0f) okno.draw(tab_am[i].body); if (tab_am[i].onCreate_clock.getElapsedTime().asSeconds() >= tab_am[i].lifeTime - 8.0f) { if (tab_am[i].onCreate_clock.getElapsedTime().asMilliseconds() % 500 >= 0 && tab_am[i].onCreate_clock.getElapsedTime().asMilliseconds() % 500 <= 125) { //nie rysij } else okno.draw(tab_am[i].body); } } } if (!tab_hp.empty()) { for (int i = 0; i < tab_hp.size(); i++) { if (tab_hp[i].onCreate_clock.getElapsedTime().asSeconds() < tab_hp[i].lifeTime - 8.0f) okno.draw(tab_hp[i].body); if (tab_hp[i].onCreate_clock.getElapsedTime().asSeconds() >= tab_hp[i].lifeTime - 8.0f) { if (tab_hp[i].onCreate_clock.getElapsedTime().asMilliseconds() % 500 >= 0 && tab_hp[i].onCreate_clock.getElapsedTime().asMilliseconds() % 500 <= 125) { //nie rysij } else okno.draw(tab_hp[i].body); } } } if (!tab_z.empty()) { for (int i = 0; i < tab_z.size(); i++) okno.draw(tab_z[i].body); } for (int i = 4; i < tab_wall.size(); i++) { okno.draw(tab_wall[i]); } okno.draw(celownik); okno.draw(gracz.body); //okno.draw(gracz.point); okno.draw(wsk_gun->body); okno.draw(hp); okno.draw(bullets_Left); okno.draw(round); okno.draw(licznik_zombie); okno.draw(gun_name); okno.draw(sprint_ui); ////////////////////////////////// View view = okno.getDefaultView(); okno.display(); czas = zegar.getElapsedTime(); zegar.restart(); } }
int main() { RenderWindow window(VideoMode(1000, 800), "Racing Game"); window.setFramerateLimit(60); Game game; // Game object Clock clock; // Game time clock View gameview; View miniMap; View HUD; // Sets minimap to be distant away from gameview miniMap.zoom(4); // Makes gameview use the entire window screen gameview.setSize(Vector2f(window.getSize())); HUD.setSize(Vector2f(window.getSize())); game.loadTyrePosFromFile(); while (window.isOpen()) { Event event; while (window.pollEvent(event)) { // Closes window if close button clicked if (event.type == Event::Closed) { window.close(); // Allows window to close when 'X' is pressed return 0; } // Records key presses and sends them to game class to be processed if (event.type == Event::KeyPressed) { game.processKeyPress(event.key.code); // Detects key pressess } if (event.type == Event::KeyReleased) { game.processKeyRelease(event.key.code); // Dectects key releases } if (event.type == Event::MouseButtonReleased) { if (event.mouseButton.button == Mouse::Left) // Allows m_Tyres to be placed by clicking on the map { game.createTyre(window.mapPixelToCoords(Mouse::getPosition(window),gameview)); } } } //Gets the elasped time during the frame if (clock.getElapsedTime().asSeconds() > 0.005) { game.update(clock.getElapsedTime().asSeconds()); gameview.setCenter(game.getCarPos()); miniMap.setViewport(FloatRect(0.75f, 0, 0.25f, 0.25f)); miniMap.setCenter(2000,1600); //RPMCounter.setViewport(FloatRect(0.6f, 0.6f, 1.f, 1.f)); HUD.setCenter(game.getRPMCounterPos().x - 200, game.getRPMCounterPos().y - 100); clock.restart(); } //Draws gameview window.setView(gameview); window.clear(Color::Black); window.draw(game); //Draws minimap window.setView(miniMap); window.draw(game); //Draws HUD window.setView(HUD); window.draw(game.m_HUD); window.display(); } }
int main() { // On aura TOUJOURS comme première fichier map "Map1.tmx" puis un nombre de map a définir string etatMap = "start"; int nbMap = 20; // Tableau des différentes Maps vector<string> Maps; for(int i = 1; i < (nbMap + 1); i++) { string nomMap = "map/Map"; nomMap.append(int_to_string(i)); nomMap.append(".tmx"); Maps.push_back(nomMap); //cout << "la map " << nomMap << " a ete pushe" << endl; } string Map_EnCours = Maps[0]; unsigned int Map_Actuelle = 0; tile** Matrice; //tile** MatriceTest; //int LARGEUR_MAP = NbColonnes * LARGEUR_TILE; //int HAUTEUR_MAP = NbLignes * HAUTEUR_TILE; bool debugMode = true; // Fenêtre RenderWindow app(VideoMode((int)WINDOW_SIZE.x, (int)WINDOW_SIZE.y, 32), "Another : Beta v0.2"); // Frames Per Second (FPS) //app.setFramerateLimit(60); // limite la fenêtre à 60 images par seconde // NE PAS mettre les deux en meme temps app.setVerticalSyncEnabled(true); Texture myTile, myEchelle, myBullet, myEnnemi, myEnnemi2, myPlayer, myPlayer2, lifeBonus, myEndBlock, tileSet1, myInterrupteur, myDoor, myCheckpoint, reward; if (!myBullet.loadFromFile(SPRITES_FILE_PATH_BULLET)) // Si le chargement a échoué { cerr<<"Erreur durant le chargement de l'image"<<endl; } else { //myBullet.SetSmooth(false); } if (!myEnnemi.loadFromFile(SPRITES_FILE_PATH_ENNEMI)) // Si le chargement a échoué { cerr<<"Erreur durant le chargement de l'image"<<endl; } else { //myEnnemi.SetSmooth(false); } if (!myEnnemi2.loadFromFile(SPRITES_FILE_PATH_ENNEMI_2)) // Si le chargement a échoué { cerr<<"Erreur durant le chargement de l'image"<<endl; } else { //myEnnemi2.SetSmooth(false); } if (!myPlayer.loadFromFile(SPRITES_FILE_PATH_PLAYER)) // Si le chargement a échoué { cerr<<"Erreur durant le chargement de l'image"<<endl; } else { //myPlayer.SetSmooth(false); } if (!lifeBonus.loadFromFile(SPRITES_FILE_PATH_LIFEBONUS)) // Si le chargement a échoué { cerr<<"Erreur durant le chargement de l'image"<<endl; } else { //lifeBonus.SetSmooth(false); } if (!myTile.loadFromFile("images/blocTerre.png")) // Si le chargement a échoué { cerr<<"Erreur durant le chargement de l'image"<<endl; } else { //myTile.SetSmooth(false); } if (!myEchelle.loadFromFile("images/blocEchelle.png")) // Si le chargement a échoué { cerr<<"Erreur durant le chargement de l'image"<<endl; } else { //myEchelle.SetSmooth(false); } if (!myEndBlock.loadFromFile("images/blocFin.png")) // Si le chargement a échoué { cerr<<"Erreur durant le chargement de l'image"<<endl; } else { //myEndBlock.SetSmooth(false); } if (!tileSet1.loadFromFile("map/tileset1.png")) // Si le chargement a échoué { cerr<<"Erreur durant le chargement de l'image"<<endl; } else { //tileSet1.SetSmooth(false); } if (!myInterrupteur.loadFromFile("images/interrupteur.png")) // Si le chargement a échoué { cerr<<"Erreur durant le chargement de l'image"<<endl; } else { //myInterrupteur.SetSmooth(false); } if (!myDoor.loadFromFile("images/porteCoulissante.png")) // Si le chargement a échoué { cerr<<"Erreur durant le chargement de l'image"<<endl; } else { //myDoor.SetSmooth(false); } if (!myCheckpoint.loadFromFile("images/checkpoint.png")) // Si le chargement a échoué { cerr<<"Erreur durant le chargement de l'image"<<endl; } else { //myCheckpoint.SetSmooth(false); } if (!reward.loadFromFile("images/reward.png")) // Si le chargement a échoué { cerr<<"Erreur durant le chargement de l'image"<<endl; } else { //reward.SetSmooth(false); } vector<Bullet> vectorBullet; vector<Character> vectorCharacter; vector<Object*> vectorObject; // ====== Variable importante !! ======= // int x = 150; // int y = 150; int controleSaut = false; /* Booléen qui va permettre de ne pas relancer un second saut avant d'avoir relaché la touche */ float transparence = 0; float transparenceInverse = 255; Clock clockTempsMap; Clock clockFrame; bool startGame = false; bool changementDeMap = false; /*string etatMap = "start"; // Tableau des différentes Maps vector<string> Maps; for(int i = 1; i < (nbMap + 1); i++) { string nomMap = "map/Map"; nomMap.append(int_to_string(i)); nomMap.append(".tmx"); Maps.push_back(nomMap); //cout << "la map " << nomMap << " a ete pushe" << endl; }*/ // ===================================== // ===================================== // Création et positionnement du joueur au lancement du jeu // ========================= // Création d'une vue qui suivra les déplacements du joueur View vue = app.getDefaultView(); View hud; // ========================================================= // Création des barres de vie et d'énergie du joueur et du rectangle de fondu sf::RectangleShape hud1; hud1.setSize(sf::Vector2f(150, 140)); hud1.setFillColor(sf::Color(190, 200, 200)); hud1.setOutlineColor(sf::Color::Black); hud1.setOutlineThickness(1); sf::RectangleShape barLife; barLife.setSize(sf::Vector2f(50, 10)); barLife.setFillColor(sf::Color::Red); barLife.setOutlineColor(sf::Color::Black); barLife.setOutlineThickness(1); sf::RectangleShape barPower; barPower.setSize(sf::Vector2f(50, 10)); barPower.setFillColor(sf::Color(0, 150, 255)); barPower.setOutlineColor(sf::Color::Black); barPower.setOutlineThickness(1); sf::RectangleShape fondu; fondu.setSize(sf::Vector2f(WINDOW_SIZE.x, WINDOW_SIZE.y)); // =============================================================== // Menu menu(app, false, changementDeMap, hud, WINDOW_SIZE, startGame, Maps, Map_EnCours, Map_Actuelle); createMap(Map_EnCours, &Matrice, tileSet1, myInterrupteur, myDoor, myCheckpoint, reward, vectorObject); int NbColonnes = nbColonnesMap(Map_EnCours); int NbLignes = nbLignesMap(Map_EnCours); int LARGEUR_TILE = largeurTileMap(Map_EnCours); int HAUTEUR_TILE = largeurTileMap(Map_EnCours); Player player(myPlayer, 0, 0, PLAYER_SPEED, "bleu", "normal"); PlayerPosition(player, &Matrice, NbColonnes, NbLignes, LARGEUR_TILE, "depart"); clockTempsMap.restart(); cout << "Map en cours avant main" << Map_EnCours << endl; cout << "Map Actuelle avant main" << Map_Actuelle << endl; // Boucle principale while (app.isOpen()) { // Remplissage de l'écran (couleur noire par défaut) app.clear(); //vue.setSize(WINDOW_SIZE.x, WINDOW_SIZE.y); app.setView(vue); hud = app.getDefaultView(); // On récupère le temps de rafraichissement entre chaque frame pour ajuster la vitesse du jeu float frameTime = clockFrame.restart().asSeconds(); bool actionElement = false; // On modifier la valeur du temps de la map /*if(clockTempsMap.getElapsedTime().asSeconds() > 0.1f) { tempsMap += 0.1f; clockTempsMap.restart(); }*/ /* Gestion de l'affichage d'un certain nombre de tile autour du player, et non toute la map */ int indexPlayerI = convertToIndex(player.getLeftSide(), LARGEUR_TILE); int indexPlayerJ = convertToIndex(player.getBottomSide(), LARGEUR_TILE); /* Les nombre en dessous permettent de déterminer la distance ou lon affiche la map autour du héro */ float visionI = 20, visionJ = 10; int idPImoins = indexPlayerI - visionI; int idPIplus = indexPlayerI + visionI; int idPJmoins = indexPlayerJ - visionJ; int idPJplus = indexPlayerJ + visionJ; if(idPImoins < 0) idPImoins = 0; if(idPIplus > NbColonnes) idPIplus = NbColonnes; if(idPJmoins < 0) idPJmoins = 0; if(idPJplus > NbLignes) idPJplus = NbLignes; for(int j=idPJmoins; j<idPJplus; j++) for(int i=idPImoins; i<idPIplus; i++) if(Matrice[i][j].spr != 0) app.draw(*Matrice[i][j].spr); //================================================= /* REGENERATION du POWER */ player.setPower(player.getPower() + 0.2f); if(player.getPower() > 100.0f) player.setPower(100.0f); if(player.getPower() < 0) player.setPower(0); if(player.getPower() > 50.0f) player.setSurchauffe(false); /* ===================== */ /* == LIFE == */ if(player.getLife() <= 100) player.upLife(0.05f); if(player.getLife() > 200.0f) player.setLife(200.0f); if(player.getLife() < 0) player.setLife(0); /* ===================== */ // Dès que la vitesse descend en dessous de 0 alors le joueur n'est plus en saut if(player.getSpeedY() < 0) player.setEnSaut(false); /* ===================== */ /* GRAVITE : On diminue la vitesse verticale si pas sur Terre */ if(!player.surTerre()){ player.setSpeedY(player.getSpeedY() - 30.0f); /* Effet de resistance de l'air */ if((CollisionDecorLateralSide(LARGEUR_TILE, HAUTEUR_TILE, NbColonnes, NbLignes, player, Matrice, vectorObject) == 1) || (CollisionDecorLateralSide(LARGEUR_TILE, HAUTEUR_TILE, NbColonnes, NbLignes, player, Matrice, vectorObject) == 2) ) { if(player.getSpeedY() < -400.0f) player.setSpeedY(-400.0f); } else { if(player.getSpeedY() < -800.0f) player.setSpeedY(-800.0f); } } /* ===================== */ /* On enleve la GRAVITE lorsque l'on est au sol */ if(player.surTerre()){ player.setSpeedY(0); } /* ===================== */ /* CLOCK du freeze Time */ if(player.getFreeze()){ if(player.getClockFreeze() > 1.5f){ player.setFreeze(false); player.setSpeedY(0); } } // ====================== Event event; while (app.pollEvent(event)) { if(event.type == sf::Event::KeyReleased && event.key.code == Keyboard::Space){ //player.setEnSaut(false); controleSaut = false; } if(event.type == sf::Event::KeyReleased && event.key.code == Keyboard::Down){ player.setDescendre(false); } if(event.type == sf::Event::KeyReleased && event.key.code == Keyboard::Right){ player.setDeplacement(false); player.setMouvementDroite(false); } if(event.type == sf::Event::KeyReleased && event.key.code == Keyboard::Left){ player.setDeplacement(false); player.setMouvementGauche(false); } if(event.type == sf::Event::KeyReleased && event.key.code == Keyboard::LShift){ player.notShooting(); } switch(event.type) { case Event::Closed : // Croix de fermeture app.close(); break; case Event::KeyPressed : // Appui sur une touche { switch(event.key.code) { case Keyboard::Escape : // Touche echap if(player.surTerre()) { startGame = false; menu(app, true, changementDeMap, hud, WINDOW_SIZE, startGame, Maps, Map_EnCours, Map_Actuelle); if(changementDeMap) { clockTempsMap.restart(); player.setScore(0); deleteMatrice(&Matrice, NbColonnes, NbLignes, vectorObject); createMap(Map_EnCours, &Matrice, tileSet1, myInterrupteur, myDoor, myCheckpoint, reward, vectorObject); NbColonnes = nbColonnesMap(Map_EnCours); NbLignes = nbLignesMap(Map_EnCours); PlayerPosition(player, &Matrice, NbColonnes, NbLignes, LARGEUR_TILE, "depart"); changementDeMap = false; } } else { cout << "Vous devez etre sur terre pour aller dans le menu. (En cas de probleme, sautez !)" << endl; } break; default: break; } } default: break; } } if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) { if(!player.getMouvementDroite()){ player.setMouvementGauche(true); if(!player.getFreeze()){ // if(!Matrice[mxGauche][myGauche].solid){ if(!player.getFreeze()) //if(player.getSpeed() > -15.0f) player.deplacementGaucheX(); // } player.setDeplacement(true); } player.setDirectionGauche(); } } if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) { if(!player.getMouvementGauche()){ player.setMouvementDroite(true); if(!player.getFreeze()){ //if(!Matrice[mxDroite][myDroite].solid){ if(!player.getFreeze()) //if(player.getSpeed() < 15.0f) player.deplacementDroiteX(); //} player.setDeplacement(true); } player.setDirectionDroite(); } } if (sf::Keyboard::isKeyPressed(sf::Keyboard::Space)) { if(!controleSaut && !player.getFreeze() && player.surTerre()){ player.setSpeedY(650.0f); player.setEnSaut(true); controleSaut = true; } if(!controleSaut && !player.getFreeze() && !player.surTerre()) { if(CollisionDecorLateralSide(LARGEUR_TILE, HAUTEUR_TILE, NbColonnes, NbLignes, player, Matrice, vectorObject) == 1) { player.setSpeedY(850.0f); player.setSpeed(700.0f); player.setEnSaut(true); controleSaut = true; //cout << "saut gauche" << endl; } else if(CollisionDecorLateralSide(LARGEUR_TILE, HAUTEUR_TILE, NbColonnes, NbLignes, player, Matrice, vectorObject) == 2) { player.setSpeedY(850.0f); player.setSpeed(-700.0f); player.setEnSaut(true); controleSaut = true; //cout << "saut droite" << endl; } } } if (sf::Keyboard::isKeyPressed(sf::Keyboard::A)) { if(!player.getSurchauffe()){ player.teleport(); player.setFreeze(false); } } if (sf::Keyboard::isKeyPressed(sf::Keyboard::E)) { actionElement = true; } if (sf::Keyboard::isKeyPressed(sf::Keyboard::P)) { etatMap = "end"; } if (sf::Keyboard::isKeyPressed(sf::Keyboard::Z)) { if(!player.getFreeze()) player.freezeTime(); } if (sf::Keyboard::isKeyPressed(sf::Keyboard::LShift)) { if(player.getClockBullet() > 0.2f){ if(player.getDirection() == "droite"){ vectorBullet.push_back(Bullet(myBullet, (player.getRightSide() - 10), (player.getTopSide() + 12.0f), (BULLET_SPEED * frameTime), player.getDirection(), player.getEquipe(), "ball")); }else if(player.getDirection() == "gauche"){ vectorBullet.push_back(Bullet(myBullet, (player.getLeftSide() - 20), (player.getTopSide() + 12.0f), (BULLET_SPEED * frameTime), player.getDirection(), player.getEquipe(), "ball")); } player.resetClockBullet(); } player.shootAnimation(); } if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down)) { player.setDescendre(true); } // =================================================== // =============== AFFICHAGE DES TESTS =============== // =================================================== /*if(CollisionDecorPlafond(LARGEUR_TILE, HAUTEUR_TILE, NbColonnes, NbLignes, player, Matrice)) cout << " COLLISION PLAFOND " << endl; else cout << " PAS COLLISION PLAFOND " << endl; if(CollisionDecorSol(LARGEUR_TILE, HAUTEUR_TILE, NbColonnes, NbLignes, player, Matrice)) cout << " COLLISION SOL " << endl; else cout << " PAS COLLISION SOL " << endl; */ /*if(player.surTerre()) cout << " SUR TERRE " << endl; else cout << " PAS SUR TERRE " << endl; */ //cout << player.getSpeed() << endl; /* cout << vectorCharacter.size() << endl; cout << vectorBullet.size() << endl; cout << vectorObject.size() << endl;*/ // cout << "speed y :" << player.getSpeedY() << endl; // =================================================== // =================================================== /* Friction / Ralentissement de la vitesse latérale */ if(!player.getDeplacement()){ if(player.getSpeed() > 1500.0f){ player.setSpeed(player.getSpeed() - 500.0f); }else if(player.getSpeed() < -1500.0f){ player.setSpeed(player.getSpeed() + 500.0f); } if(player.getSpeed() > 0){ if(player.getSpeed() < 150.00f){ player.setSpeed(0); } else{ player.setSpeed(player.getSpeed() - 50.00f); } }else if(player.getSpeed() < 0){ if(player.getSpeed() > -150.0f){ player.setSpeed(0); } else{ player.setSpeed(player.getSpeed() + 50.00f); } } } /* Lorsque le joueur n'est pas Freeze on effectue les essai de mouvement sur X et Y pour on application la nouvelle position */ if(!player.getFreeze()){ EssaiDeplacementX(Matrice, frameTime, player, player.getSpeed(), LARGEUR_TILE, HAUTEUR_TILE, NbColonnes, NbLignes, vectorObject); if(EssaiDeplacementY(Matrice, frameTime, player, player.getSpeedY(), LARGEUR_TILE, HAUTEUR_TILE, NbColonnes, NbLignes, vectorObject)){ // Si true, alors le joueur est en contact avec un bloc de fin de niveau cout << "ERREUR" << endl; cout << Map_Actuelle << " " << Map_EnCours << endl; etatMap = "end"; } player.setPosition(); } // =========================================================================== // =========== Double boucle testant chaque balles si elle est en =========== // =========== collision avec un ennemi, un player, un mur ou rien =========== // =========================================================================== for(int unsigned i = 0; i < vectorBullet.size(); i++){ if(CollisionBulletDecor(LARGEUR_TILE, HAUTEUR_TILE, NbColonnes, NbLignes, vectorBullet[i], Matrice)){ vectorBullet[i].kill(); } if(vectorBullet[i].getDirection() == "droite"){ vectorBullet[i].deplacementDroiteX(); }else if(vectorBullet[i].getDirection() == "gauche"){ vectorBullet[i].deplacementGaucheX(); } vectorBullet[i].drawBullet(app); // Collision des balles et des ennemis for(int unsigned j = 0; j < vectorCharacter.size(); j++){ float degatDeal; // On test si l'équipe de la balle est la meme que celle du character, si non, on peut tester la collision if(vectorBullet[i].getEquipe() != vectorCharacter[j].getEquipe()){ if(!vectorBullet[i].isKilled()){ if(CollisionBulletCharacter(vectorBullet[i], vectorCharacter[j])){ degatDeal = vectorBullet[i].getDegat(); vectorCharacter[j].downLife(degatDeal); vectorBullet[i].kill(); } } } } // Collision des balles et des objet for(int unsigned j = 0; j < vectorObject.size(); j++){ if(vectorObject[j]->getSolid()){ if(CollisionObjectBullet(vectorObject[j], vectorBullet[i])){ vectorBullet[i].kill(); if(vectorObject[j]->getBreakable()){ vectorObject[j]->kill(); } } } } // Collision des balles et du joueur if(vectorBullet[i].getEquipe() != player.getEquipe()){ if(!vectorBullet[i].isKilled()){ if(CollisionBulletCharacter(vectorBullet[i], player)){ float degatDeal = vectorBullet[i].getDegat(); player.downLife(degatDeal); vectorBullet[i].kill(); } } } } // =========================================================================== // =================================================== // ============== Boucle sur les objets ============== // =================================================== for(int unsigned i = 0; i < vectorObject.size(); i++){ for(int unsigned j = 0; j < vectorCharacter.size(); j++){ if(CollisionObjectCharacter(vectorObject[i], vectorCharacter[j])){ float life = vectorObject[i]->getLife(); vectorCharacter[j].upLife(life); vectorObject[i]->kill(); } } if(CollisionObjectCharacter(vectorObject[i], player)){ if(vectorObject[i]->getType() == "lifeBonus"){ float life = vectorObject[i]->getLife(); player.upLife(life); vectorObject[i]->kill(); } else if(vectorObject[i]->getType() == "interrupteur"){ if(actionElement){ if(vectorObject[i]->getEstActive() == false){ vectorObject[i]->setActive(); vectorObject[i]->resetClockInt(); } } } else if(vectorObject[i]->getType() == "tilePique"){ if(vectorObject[i]->getDeadly()){ player.kill(); } } else if(vectorObject[i]->getType() == "checkpoint"){ if(!vectorObject[i]->getActive()){ vectorObject[i]->setActive(true); player.setInitialPosition(vectorObject[i]->getX(), vectorObject[i]->getY()); for(int unsigned j = 0; j < vectorObject.size(); j++){ if(vectorObject[j]->getType() == "checkpoint"){ if(j != i) { if(vectorObject[j]->getActive()){ vectorObject[j]->setActive(false); } } } } } } else if(vectorObject[i]->getType() == "blockPique"){ if(vectorObject[i]->getDeadly()){ player.kill(); } } else if(vectorObject[i]->getType() == "reward"){ int val = vectorObject[i]->getValeur(); player.setScore(player.getScore() + val); vectorObject[i]->kill(); } } //cout << "test 1030 et taille de : " << vectorObject.size() << endl; if((vectorObject[i]->getType() == "interrupteur") && (vectorObject[i]->getEstActive())){ if(vectorObject[i]->getClockInt() > vectorObject[i]->getDelai()){ vectorObject[i]->setNotActive(); } } else if(vectorObject[i]->getType() == "door"){ if(vectorObject[i]->buttonIsActive()){ vectorObject[i]->setOpen(true); } else{ if(!CollisionObjectCharacter(vectorObject[i], player)) vectorObject[i]->setOpen(false); } } else if(vectorObject[i]->getType() == "launcher"){ if(!vectorObject[i]->getIsReady()){ if(vectorObject[i]->getClock() > vectorObject[i]->getDecallage()){ vectorObject[i]->resetClock(); vectorObject[i]->setReady(true); } } else{ if(vectorObject[i]->getClock() > vectorObject[i]->getInterval()){ vectorObject[i]->resetClock(); float x, y; if(vectorObject[i]->getDirection() == "gauche") { x = (vectorObject[i]->getLeftSide()) - 5.0f; y = (vectorObject[i]->getTopSide()) + 15.0f; vectorBullet.push_back(Bullet(myBullet, x, y, (BULLET_SPEED * frameTime), vectorObject[i]->getDirection(), vectorObject[i]->getEquipe(), vectorObject[i]->getAmmoType())); } else if(vectorObject[i]->getDirection() == "droite") { x = (vectorObject[i]->getRightSide()) - 15.0f; y = (vectorObject[i]->getTopSide()) + 15.0f; vectorBullet.push_back(Bullet(myBullet, x, y, (BULLET_SPEED * frameTime), vectorObject[i]->getDirection(), vectorObject[i]->getEquipe(), vectorObject[i]->getAmmoType())); } } } } else if(vectorObject[i]->getType() == "blockPique"){ // if(EssaiDeplacementY(Matrice, app, player, player.getSpeedY(), LARGEUR_TILE, HAUTEUR_TILE, NbColonnes, NbLignes, vectorObject)){ if(CollisionObjectDecor(LARGEUR_TILE, HAUTEUR_TILE, NbColonnes, NbLignes, i, vectorObject, Matrice)) { if(vectorObject[i]->getDirection() == "gauche"){ vectorObject[i]->setDirection("droite"); } else if(vectorObject[i]->getDirection() == "droite"){ vectorObject[i]->setDirection("gauche"); } else if(vectorObject[i]->getDirection() == "haut"){ vectorObject[i]->setDirection("bas"); } else if(vectorObject[i]->getDirection() == "bas"){ vectorObject[i]->setDirection("haut"); } } if(vectorObject[i]->getDirection() == "gauche"){ vectorObject[i]->deplacementGaucheX(); } else if(vectorObject[i]->getDirection() == "droite"){ vectorObject[i]->deplacementDroiteX(); } else if(vectorObject[i]->getDirection() == "haut"){ vectorObject[i]->deplacementHautY(); } else if(vectorObject[i]->getDirection() == "bas"){ vectorObject[i]->deplacementBasY(); } } else if(vectorObject[i]->getType() == "reward"){ if(CollisionObjectDecor(LARGEUR_TILE, HAUTEUR_TILE, NbColonnes, NbLignes, i, vectorObject, Matrice)) { vectorObject[i]->deplacement(true, frameTime); } else { vectorObject[i]->deplacement(false, frameTime); } } vectorObject[i]->drawObject(app); } /** A AJUSTER */ vue.setCenter((int)(player.getX() + (player.GetSprite().getLocalBounds().width)/2), (int)(player.getY() + (player.GetSprite().getLocalBounds().height)/2)); player.drawPlayer(app); // == Boucle permettant de supprimer du Vector les balles qui sont "killed" après une collision for(int unsigned i = 0; i < vectorBullet.size();){ if(vectorBullet[i].isKilled()) vectorBullet.erase(vectorBullet.begin()+i); else i++; } // == Boucle permettant de supprimer du Vector les Ennemis qui sont "killed" lorsqu'il n'ont plus de points de vie /* // == Ou plutot de faire respawn le Character for(int unsigned i = 0; i < vectorCharacter.size();){ if(vectorCharacter[i].isKilled()){ vectorCharacter[i].setX(vectorCharacter[i].getInitialX()); vectorCharacter[i].setY(vectorCharacter[i].getInitialY()); vectorCharacter[i].setLife(vectorCharacter[i].getInitialLife()); vectorCharacter[i].setSpeed(vectorCharacter[i].getInitialSpeed()); vectorCharacter[i].setEnSaut(vectorCharacter[i].enSautInitial()); vectorCharacter[i].setSurTerre(vectorCharacter[i].surTerreInitial()); vectorCharacter[i].setPosition(); // vectorCharacter.erase(vectorCharacter.begin()+i); }else i++; }*/ // == Boucle permettant de supprimer du Vector les objets qui sont "killed" lorsqu'ils ont été utilisés for(int unsigned i = 0; i < vectorObject.size();){ if(vectorObject[i]->isKilled()) vectorObject.erase(vectorObject.begin()+i); else i++; } // == Test permettant de voir si le player est Killed, et de le faire respawn en conséquence // systeme de CHECKPOINT ici if(player.isKilled()){ player.setX(player.getInitialX()); player.setY(player.getInitialY()); player.setLife(player.getInitialLife()); player.setSpeed(player.getInitialSpeed()); player.setEnSaut(player.enSautInitial()); player.setSurTerre(player.surTerreInitial()); player.revive(); player.setPosition(); // vectorCharacter.erase(vectorCharacter.begin()+i); } app.setView(hud); // IMPORTANT << // On affiche le block hud1 hud1.setPosition((hud.getCenter().x - (hud.getSize().x / 2)), (hud.getCenter().y - (hud.getSize().y / 2))); app.draw(hud1); // Permet d'afficher les FPS en mode debug if(debugMode){ sf::Text fpsMessage; int FPS; ostringstream oss; FPS = 1 / frameTime; oss << "FPS : " << FPS; fpsMessage.setPosition((hud.getCenter().x - (hud.getSize().x / 2) + 20.0f), (hud.getCenter().y - (hud.getSize().y / 2) + 110.0f)); fpsMessage.setColor(Color(255,0,0,255)); fpsMessage.setString(oss.str()); fpsMessage.setCharacterSize(14); app.draw(fpsMessage); } // On Affiche le Score sf::Text score; ostringstream oss2; oss2 << "Score : " << player.getScore(); score.setColor(Color(0,0,0,255)); score.setPosition((hud.getCenter().x - (hud.getSize().x / 2) + 20.0f), (hud.getCenter().y - (hud.getSize().y / 2) + 90.0f)); score.setCharacterSize(14); score.setString(oss2.str()); app.draw(score); // On Affiche le temps sf::Text tpsMaps; ostringstream oss3; oss3 << "Temps : " << clockTempsMap.getElapsedTime().asSeconds(); tpsMaps.setColor(Color(0,0,0,255)); tpsMaps.setPosition((hud.getCenter().x - (hud.getSize().x / 2) + 20.0f), (hud.getCenter().y - (hud.getSize().y / 2) + 70.0f)); tpsMaps.setCharacterSize(14); tpsMaps.setString(oss3.str()); app.draw(tpsMaps); // Affichage d'un message "surcharge" si l'energie est basse sf::Text txtSurcharge; txtSurcharge.setString("Overheating !"); txtSurcharge.setColor(Color(255,0,0,255)); txtSurcharge.setCharacterSize(14); txtSurcharge.setPosition((hud.getCenter().x - (hud.getSize().x / 2) + 20.0f), (hud.getCenter().y - (hud.getSize().y / 2) + 50.0f)); if(player.getSurchauffe()) app.draw(txtSurcharge); // Variations des barres de vies et de power barLife.setSize(sf::Vector2f(player.getLife(), 10.0f)); barPower.setSize(sf::Vector2f(player.getPower(), 10.0f)); barLife.setPosition((hud.getCenter().x - (hud.getSize().x / 2) + 20.0f), (hud.getCenter().y - (hud.getSize().y / 2) + 10.0f)); barPower.setPosition((hud.getCenter().x - (hud.getSize().x / 2) + 20.0f), (hud.getCenter().y - (hud.getSize().y / 2) + 30.0f)); if(player.getSurchauffe()){ barPower.setFillColor(sf::Color(0, 25, 100)); } else{ barPower.setFillColor(sf::Color(0, 150, 255)); } app.draw(barLife); app.draw(barPower); //cout << "x now :" << player.getX() << endl; //cout << "speed Y :" << player.getSpeedY() << endl; if(etatMap == "end"){ /* Systeme de fondu pour fin de niveau // Le rectangle suit le joueur pour éviter tout problème visuel */ fondu.setPosition((hud.getCenter().x - (hud.getSize().x / 2)), (hud.getCenter().y - (hud.getSize().y / 2))); fondu.setFillColor(sf::Color(0,0,0,transparence)); app.draw(fondu); // La transparence s'effectue a 0.5 par frame ( a modifier si besoin !) if(transparence < 255){ transparence += 1.0f; } if(transparence >= 255){ save((Map_Actuelle + 2), player.getScore(), clockTempsMap.getElapsedTime().asSeconds()); // MapActuelle + 2 car pour le niveau 1 mapActuelle = 0 et que l'on veux save le dernier niveau que l'on //a atteint donc fin du 1 = 0 + 2 = 2 clockTempsMap.restart(); player.setScore(0); deleteMatrice(&Matrice, NbColonnes, NbLignes, vectorObject); GoToNextMap(Map_EnCours, Map_Actuelle, Maps); createMap(Map_EnCours, &Matrice, tileSet1, myInterrupteur, myDoor, myCheckpoint, reward, vectorObject); NbColonnes = nbColonnesMap(Map_EnCours); NbLignes = nbLignesMap(Map_EnCours); // On repositionne le joueur en fonction des valeurs initiales // ========= // IMPORTANT // Les valeurs "initiales" varieront en fonction des checkpoint et des changement de niveau // ========= // ======================== PlayerPosition(player, &Matrice, NbColonnes, NbLignes, LARGEUR_TILE, "depart"); // ================================= etatMap = "transition"; // TEMPORAIRE transparence = 0; } } if(etatMap == "transition"){ // On réalise un fondu (inverse) pour réafficher le jeu fondu.setPosition((hud.getCenter().x - (hud.getSize().x / 2)), (hud.getCenter().y - (hud.getSize().y / 2))); fondu.setFillColor(sf::Color(0,0,0,transparenceInverse)); app.draw(fondu); if(transparenceInverse > 0){ transparenceInverse -= 2.0f; } if(transparenceInverse <= 0) { etatMap = "start"; transparenceInverse = 255; } } // Affichage de la fenêtre à l'écran app.display(); } deleteMatrice(&Matrice, NbColonnes, NbLignes, vectorObject); return EXIT_SUCCESS; }
void update(RenderWindow *window) { chunkManager.update(&view); player.update(); view.setCenter(player.getPosition()); }
void Entity::getCoordinateForView(Vector2f position , View &view) { view.setCenter(position); }
int main(int argc, char **argv) { vector<string> args; for(unsigned i = 1; i < (unsigned)argc; ++i) args.push_back((string)argv[i]); srand(time(NULL)); if(inVector(args, (string)"--help") || inVector(args, (string)"-h")) { outputHelp(cout); return 0; } bool loadSystem = false; string systemName = ""; for(unsigned i = 0; i < args.size(); ++i) { if(args[i] == (string)"--load") { if(i != args.size() - 1) { loadSystem = true; systemName = args[i + 1]; args.erase(args.begin() + i); args.erase(args.begin() + i); i -= 2; } else { cerr << "psystem: --load requires argument" << endl; return 2; } } } if(!args.empty()) { cerr << "psystem: invalid argument passed" << endl; outputHelp(cerr); return 1; } unsigned windowWidth = 800, windowHeight = 600; const ldouble scaleFactor = 10.0, minPSize = 0.3, maxPSize = 3.6; string windowTitle = "psystem"; RenderWindow window(VideoMode(windowWidth, windowHeight), windowTitle, sf::Style::Close); window.setFramerateLimit(60); View view; view.setSize(windowWidth / scaleFactor, windowHeight / scaleFactor); unsigned steps = 100; ParticleSystem psystem(1.0 / 60.0 / steps); ldouble psize = 3.6 / 4, psizeDelta = 0.1; if(loadSystem) { psystem.load(systemName); if(psystem.size() < 1) { return 3; } } else { unsigned ipcount = rand() % 5 + 3; psize = 3.6 / ipcount; for(unsigned i = 0; i < ipcount; ++i) { ldouble radians = (rand() % 360) * M_PI/180.0; psystem.push(Particle(cos(radians)*16.0, sin(radians)*16.0, psize)); } } bool done = false, mode = true, run = true; while(!done && window.isOpen()) { Event event; while(window.pollEvent(event)) { if(event.type == Event::Closed) window.close(); if(event.type == Event::KeyPressed) { if(event.key.code == Keyboard::Escape) done = true; if(event.key.code == Keyboard::Space) mode = !mode; if(event.key.code == Keyboard::P) run = !run; } if(event.type == Event::MouseButtonPressed) { // ConvertCoords -> mapPixelToCoords or mapCoordsToPixel sf::Vector2i mouseButtonLoc(event.mouseButton.x, event.mouseButton.y); ldouble mx = window.mapPixelToCoords(mouseButtonLoc, view).x, my = window.mapPixelToCoords(mouseButtonLoc, view).y; if(event.mouseButton.button == Mouse::Left) { psystem.push(Particle(mx, my, psize)); } else if(event.mouseButton.button == Mouse::Right) { for(unsigned p = 0; p < psystem.size(); ++p) { Particle cp = psystem.get(p); ldouble dx = mx - cp.px, dy = my - cp.py, distance = sqrt(dx*dx + dy*dy); if(distance < cp.radius) { psystem.erase(p); break; } } } } if(event.type == Event::MouseWheelMoved) { psize += event.mouseWheel.delta * psizeDelta; if(psize < minPSize) psize = minPSize; if(psize > maxPSize) psize = maxPSize; } } if(run) for(unsigned i = 0; i < steps/2; ++i) psystem.update(); window.clear(Color::White); if(mode) { view.setCenter(psystem.getX(), psystem.getY()); } else if(psystem.size() > 0) { view.setCenter(psystem.get(0).px, psystem.get(0).py); } window.setView(view); psystem.draw(window); window.display(); } if(window.isOpen()) window.close(); return 0; }