Esempio n. 1
0
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;
}
Esempio n. 2
0
/**
 * 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;
}
Esempio n. 3
0
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;

}