int Game::start(){ //TODO: folgenden Code auf Exceptions statt ERROR codes umschreiben if (!initialize()){ printf("Could not initialize => exit \n"); SDL_Quit(); return 1; } else { printf("Creating a Player...\n"); Vector2D player_pos; player_pos.x = 300; player_pos.y = 300; Player* player = new Player(renderer); player->set_position(player_pos); drawable_objects.push_back(player); active_player = player; //printf("Creating 1. object...\n"); //DrawableObject* first_test_object; //first_test_object = new DrawableObject(renderer); //drawable_objects.push_back(first_test_object); printf("Creating a chargeroid...\n"); Chargeroid* chargeroid_test_object = new Chargeroid(renderer); drawable_objects.push_back(chargeroid_test_object); printf("Creating a second chargeroid...\n"); Chargeroid* chargeroid_test_object2 = new Chargeroid(renderer); drawable_objects.push_back(chargeroid_test_object2); // MAIN GAME LOOP float time_passed = 0.; float last_time_in_s = get_current_time_in_s(); float current_time_in_s = get_current_time_in_s(); while (is_Running){ current_time_in_s = get_current_time_in_s(); time_passed = float(current_time_in_s - last_time_in_s); handle_input_events(); update_game_state(time_passed); render_current_frame(); last_time_in_s = current_time_in_s; } clean_up(); return 0; } }
void Game_Manager::update(float secTime) { Manger((int)myPlayer.getPosY(), (int)((m_view2.getCenter().x + (myPlayer.getPosX() * 248)) / 248 - 4)); actualisationNiveau((int) ((m_view2.getCenter().x + (myPlayer.getPosX() * 248)) / 248 - 4)); if (myPlayer.getEnergy() <= 0) { execute_action(ACT_RESTART_APP); } if (is_tree) { int cost = 20; skill_button[0].update(100, 100); if (skill_button[0].is_activated()) { skill_button[0].desactivate(); is_tree = false; } skill_button[3].update(670, 290); if (skill_button[3].is_activated() && myPlayer.getEnergy() > cost) { skill_button[3].desactivate(); myPlayer.gainEnergy(-cost); myPlayer.m_FDReduceCost(-10); skill_level++; } skill_button[4].update(870, 290); if (skill_button[4].is_activated() && myPlayer.getEnergy() > cost) { skill_button[4].desactivate(); myPlayer.gainEnergy(-cost); myPlayer.m_FDReduceCooldown(-1.0f); skill_level++; } skill_button[5].update(1070, 290); if (skill_button[5].is_activated() && myPlayer.getEnergy() > cost) { skill_button[5].desactivate(); myPlayer.gainEnergy(-cost); myPlayer.m_FDIncreaseDistance(1); skill_level++; } skill_button[6].update(1310, 290); if (skill_button[6].is_activated() && myPlayer.getEnergy() > cost) { skill_button[6].desactivate(); myPlayer.gainEnergy(-cost); myPlayer.m_VAReduceCost(-10); skill_level++; } skill_button[7].update(1450, 290); if (skill_button[7].is_activated() && myPlayer.getEnergy() > cost) { skill_button[7].desactivate(); myPlayer.gainEnergy(-cost); myPlayer.m_VAReduceCooldown(-1.0f); skill_level++; } skill_button[8].update(1650, 290); if (skill_button[8].is_activated() && myPlayer.getEnergy() > cost) { skill_button[8].desactivate(); myPlayer.gainEnergy(-cost); myPlayer.m_VAIncreaseDistance(1); skill_level++; } } else if (is_menu_visible) { menu1.update(); if (menu1.is_playing() == true) { ChoixDifficulter(menu1.getDifficulte()); ChoixMonde(menu1.getWorld()); is_menu_visible = false; } if (menu1.is_quitting() == true) { execute_action(ACT_CLOSE_APP); } } else { int retour = myPlayer.update(secTime, _difficulter); if (retour == 1) { execute_action(ACT_GO_RIGHT); } int posXPla =(int) ((m_view2.getCenter().x + (myPlayer.getPosX() * 248)) / 248 - 4); int posYpla =(int) myPlayer.getPosY(); float hitLimit = (m_view2.getCenter().x + (myPlayer.getPosX() * 248)) / 248 - 4 - posXPla; if (((hitLimit > 0.75)) && (Map[posYpla][posXPla + 1].getObject() == 0) && (myPlayer.isEtheral()) && (myPlayer.playerState != VANISH)) { myPlayer.setEtheral(0); } if (myPlayer.isEtheral()) { retour = 2; } m_view2.move(500 * secTime, 0); if ((((Map[posYpla][posXPla + 1].getObject() != 0) || (Map[posYpla][posXPla].getObject() != 0)) && (!(((hitLimit > 0.75)) && (Map[posYpla][posXPla + 1].getObject() == 0))) && (retour != 2))) { execute_action(ACT_GO_LEFT); } else { if ((myPlayer.playerState == SMASHED) && (Map[posYpla][posXPla + 2].getObject() == 0)) { myPlayer.playerState = MOVING; } } if ((Map[posYpla][posXPla + 1].getLight() != 0) || (Map[posYpla][posXPla].getLight() != 0)) { if ((!((Map[posYpla][posXPla].getLight() != 0) && (hitLimit > 0.75))) && (Map[posYpla][posXPla + 1].getLight() == 0)) { myPlayer.setMovable(0); if (myPlayer.isLight() == 0) { myPlayer.setLight(1); } } else { if (myPlayer.isMovable() == 0) { myPlayer.setMovable(1); } if (myPlayer.isLight() == 1) { cout << "UNLIGHT" << endl; myPlayer.setLight(0); } } } } bool isEvent = handle_input_events(); }
void Game_Manager::update(float timeElapsed) { handle_input_events(); m_view1.zoom(zoom); if (monster_time.getElapsedTime().asSeconds() >= 45) { monster_time.restart(); int a = rand() % 5 + 1; for (int i = 0; i <= a; i++) { monster_max++; monster1.push_back(Monster{ m_app, &m_view1, i }); monster_state.push_back(true); } } zoom_time = clock_zoom.getElapsedTime(); if (zoom_time.asSeconds() > 0.05 && zoom_change != ZOOM_NO_CHANGE) { clock_zoom.restart(); if (zoom_change == ZOOM_ADD && zoom_rate >= -30) { zoom = 0.90f; zoom_rate--; } if (zoom_change == ZOOM_LESS && zoom_rate <= 50) { zoom = 1.1f; zoom_rate++; } zoom_change = ZOOM_NO_CHANGE; } else { zoom = 1; } if (citizen_number == 0 || oxygen_number == 0.0f) { fail = true; reset(); } if (cinematic_on) { cinematic_update(); } if (!pause) { m_view1.setCenter(static_cast<float>(m_x_offset), static_cast<float>(m_y_offset)); m_app->setView(m_view1); //radiation haldling radio_bar.scale(1.0f, my_map[selected_tile.clicked_y][selected_tile.clicked_x].get_radiation(), true); //oxygen_handling if (oxygen_clock.getElapsedTime().asSeconds() > 0.5f) { oxygen_clock.restart(); oxygen_number -= 0.0008; } oxygen_bar.scale(oxygen_number, 1.0f, false); buttons[0].update(selected_tile.clicked_x* tile_size, selected_tile.clicked_y * tile_size); if (buttons[0].is_activated()) { buttons[0].desactivate(); execute_action(ACT_DIGING); } buttons[1].update(selected_tile.goal_x* tile_size, selected_tile.goal_y * tile_size + buttons[1].get_h()); if (buttons[1].is_activated()) { buttons[1].desactivate(); execute_action(ACT_MOVE); } buttons[2].update((selected_tile.clicked_x + 1)* tile_size - buttons[2].get_h(), selected_tile.clicked_y * tile_size + buttons[2].get_h()); if (buttons[2].is_activated()) { buttons[2].desactivate(); execute_action(ACT_STOP); } buttons[3].update(selected_tile.clicked_x* tile_size, selected_tile.clicked_y * tile_size + buttons[3].get_h()); if (buttons[3].is_activated()) { buttons[3].desactivate(); if (isOccupied(selected_tile.clicked_x ,selected_tile.clicked_y) ) { if (my_map[selected_tile.clicked_y][selected_tile.clicked_x].get_resources_id() == 0) { metal_number += my_map[selected_tile.clicked_y][selected_tile.clicked_x].get_ressources(); } if (my_map[selected_tile.clicked_y][selected_tile.clicked_x].get_resources_id() == 1) { food_number += my_map[selected_tile.clicked_y][selected_tile.clicked_x].get_ressources(); } } } buttons[4].update(m_screen_x - buttons[4].get_w() - 30, m_screen_y / 2 + buttons[4].get_h()); if (buttons[4].is_activated()) { buttons[4].desactivate(); if (isOccupied(selected_tile.clicked_x, selected_tile.clicked_y)) { execute_action(ACT_BUILD_WORKBENCH); } } buttons[5].update(m_screen_x - buttons[5].get_w() - 30, (m_screen_y / 2) + (buttons[5].get_h() + 80)); if (buttons[5].is_activated()) { buttons[5].desactivate(); execute_action(ACT_BUILD_GENERATOR); } buttons[6].update(m_screen_x - buttons[5].get_w() - 30, (m_screen_y / 2) + (buttons[6].get_h() + 80 * 2)); if (buttons[6].is_activated()) { buttons[6].desactivate(); execute_action(ACT_BUILD_FARM); } buttons[7].update(m_screen_x - buttons[7].get_w() - 30, (m_screen_y / 2) + (buttons[7].get_h() + 80 * 3)); if (buttons[7].is_activated()) { buttons[7].desactivate(); execute_action(ACT_BUILD_ARMORY); } buttons[8].update(m_screen_x - buttons[8].get_w() - 30, (m_screen_y / 2) + (buttons[8].get_h() + 80 * 4)); if (buttons[8].is_activated()) { buttons[8].desactivate(); execute_action(ACT_BUILD_AERATION); } buttons[9].update(m_screen_x - buttons[9].get_w() - 30, (m_screen_y / 2) + (buttons[9].get_h() + 80 * 5)); if (buttons[9].is_activated()) { buttons[9].desactivate(); execute_action(ACT_BUILD_BUNKER); } for (int i = 0; i < citizen_max; i++) { if (citizen_state[i]) { character1[i].update(my_map, timeElapsed); //my_map[character1[i].getY][character1[i].getX].addCharacter(*character1[i]); if (!character1[i].alive()) { citizen_number--; citizen_state[i] = false; } } } for (int i = 0; i < monster_max; i++) { if (monster_state[i]) { monster1[i].newGoal(character1[1].getX(), character1[1].getY()); monster1[i].update(my_map, timeElapsed); if (!monster1[i].alive()) { monster_state[i] = false; } } } for (size_t x = 0; x < 5; x++) { for (size_t y = 0; y < 10; y++) { my_map[x][y].update(timeElapsed); } } //if the mouse is over the right tile selected_tile.x = m_selection_vector.x / tile_size; selected_tile.y = m_selection_vector.y / tile_size; if (selected_tile.x < 0) { selected_tile.x = 0; } if (selected_tile.x > 4) { selected_tile.x = 4; } if (selected_tile.y < 0) { selected_tile.y = 0; } if (mouse_vec.x < m_screen_x - buttons[6].get_w() - 30) { if (clicked) { if (sf::Mouse::isButtonPressed(sf::Mouse::Left)) { if (selected_tile.goal_x != selected_tile.x || selected_tile.goal_y != selected_tile.y) { selected_tile.previous_clicked_x = selected_tile.clicked_x; selected_tile.previous_clicked_y = selected_tile.clicked_y; selected_tile.clicked_x = selected_tile.x; selected_tile.clicked_y = selected_tile.y; } } if (sf::Mouse::isButtonPressed(sf::Mouse::Right)) { if (selected_tile.x != selected_tile.clicked_x || selected_tile.y != selected_tile.clicked_y) { selected_tile.goal_x = selected_tile.x; selected_tile.goal_y = selected_tile.y; glissor_on = true; } } } } citizen_number_text.refill("Still alive: " + std::to_string(citizen_number)); food_number_text.refill("Food: " + std::to_string(food_number)); metal_number_text.refill("Metal: " + std::to_string(metal_number)); } combat(timeElapsed); }