bool World::load(const std::string& dir) { fs::path world_dir(dir); fs::path region_dir = world_dir / "region"; if(!fs::exists(world_dir)) { std::cerr << "Error: World directory " << world_dir << " does not exist!" << std::endl; } else if(!fs::exists(region_dir)) { std::cerr << "Error: Region directory " << region_dir << " does not exist!" << std::endl; } else { return readRegions(region_dir.string()); } return false; }
/** * Loads a world from a directory. */ bool World::load(const std::string& dir, int rotation) { this->rotation = rotation; fs::path world_dir(dir); fs::path region_dir = world_dir / "region"; if(!fs::exists(world_dir)) { std::cerr << "World directory " << world_dir << " does not exists!" << std::endl; } else if(!fs::exists(region_dir)) { std::cerr << "Region directory " << region_dir << " does not exists!" << std::endl; } else { return readRegions(region_dir.string()); } return false; }
void Game::update(){ player_->update(jump,duck); if (dead) { std::cout << "DEAD!!" << std::endl; ball_speed = 0; } if (jump || duck || duck_camera) { if (jump){ jump_controll(); } if (duck){ duck_controll(); } if (duck_camera) { duck_cam_controll(); } if (!turn) { check_turn_key(); } } else{ if (!good_turn) { y_pos_n = height_controll(x_pos,y_pos, z_pos,offset,maze,world_angle,imortality,good_turn); } if (y_pos_n < -0.9) { dead = true; } } if (!late_turn_2_death) { if (turn) { if (wait_turn_pos) { GLfloat to_centrum = maze->length - fabs(x_pos) - (width_)/2.0 - next_start_pos; //std::cout << "m->l = " << maze->length << " || fa(x) = " << fabs(x_pos) << " || w/2 = " << (width_)/2.0 << std::endl << "to_centrum = " << to_centrum << std::endl; if (to_centrum <= 0) { world_trans = T(-to_centrum, 0, 0); maze->update_pos(world_trans); x_pos += -to_centrum*cos(world_angle); z_pos += -to_centrum*sin(world_angle); turn_angle = M_PI_2/turn_steps; ball_speed = 0; global_dir = ((global_dir+1*(int)pol_dir)%4+4)%4; world_angle += -turn_angle*pol_dir; maze->update_turn(turn_angle*pol_dir,x_pos,z_pos); wait_key = turn_steps-1; wait_turn_pos = false; } } else turn_controll(); } } if (good_turn && !turn && !wait_turn_pos){ // Efter en good tur GLfloat pos = (width_ - 2)/2; next_start_pos = fabs(x_pos*cos(global_dir*M_PI_2) + z_pos*sin(global_dir*M_PI_2)) - pos; //std::cout << "next_start_pos = " << next_start_pos << std::endl; if (next_start_pos > 5){ //Pa nasta texture maze->null_global_dir(last_turn); x_pos = -next_start_pos; z_pos = 0; global_dir = 0; world_angle = 0; world_trans = T(x_pos,y_pos,z_pos); Maze* temp_maze; if (last_turn == 'r') { // DisposeModel(maze->left->left->track); // DisposeModel(maze->left->right->track); // DisposeModel(maze->left->track); // DisposeModel(maze->track); temp_maze = maze->right; maze->right = nullptr; } else{ // DisposeModel(maze->right->left->track); // DisposeModel(maze->right->right->track); // DisposeModel(maze->right->track); // DisposeModel(maze->track); temp_maze = maze->left; maze->left = nullptr; } temp_maze->update_tree(); delete maze; maze = temp_maze; temp_maze = nullptr; delete temp_maze; generate_terrain_bool = true; maze->new_path(); // FUnkar hit! good_turn = false; return; } } world_dir(); x_pos += -ball_speed*cos(world_angle); z_pos += -ball_speed*sin(world_angle); y_pos_t = -(y_pos_n-y_pos); world_trans = T(-ball_speed, y_pos_t, 0); y_pos = y_pos_n; maze->update_pos(world_trans); if ( ( (int)(maze->obstacle_x_pos + x_pos) == 0) && (maze->obstacle == 1)) { if (!duck) { if (!imortality) { printf("DEAD!!!!!!!!!!\n"); dead = true; ball_speed = 0; } } } total = world_trans; }