Пример #1
0
void
ObjectLayer::lower(const ObjMapObject& obj)
{
  int i = get_object_index(obj);
  if (i != -1 && i > 0)
  {
    std::swap(impl->objects[i], impl->objects[i-1]);
  }
}
Пример #2
0
void
ObjectLayer::raise(const ObjMapObject& obj)
{
  int i = get_object_index(obj);
  if (i != -1 && impl->objects.size() > 1 && i < int(impl->objects.size())-1)
  {
    std::swap(impl->objects[i], impl->objects[i+1]);
  }
}
Пример #3
0
void build_map(){
    TYPE_CO = -1;
    TYPE_AR = -1;
    TYPE_PI = -1;
    int i,j;
    
    for(i=0;i<dis_gnum_types;i++){
        if( dis_gtype_names[i] == NULL ) continue;
        if( strncmp(dis_gtype_names[i],"AR",strlen("AR"))==0 )TYPE_AR = i;
        else if( strncmp(dis_gtype_names[i],"PI",strlen("PI"))==0 ) TYPE_PI = i;
        
    }
    
    for(i=0;i<dis_gnum_predicates;i++){
        if( dis_gpredicates[i]==NULL )continue; 
        if( strncmp(dis_gpredicates[i],"C",strlen("C")) == 0 ) TYPE_CO = i;
        else if ( strncmp(dis_gpredicates[i],"FI",strlen("FI")) == 0 ) TYPE_FI = i;
        else if ( strncmp(dis_gpredicates[i],"L",strlen("L")) == 0 ) TYPE_LA = i;
        else if ( strncmp(dis_gpredicates[i],"FO",strlen("FO")) == 0 ) TYPE_FO = i;
        else if ( strncmp(dis_gpredicates[i],"O",strlen("O")) == 0 ) TYPE_O = i;
    }
    
    //printf("TYPE_CO%d,FIRST%d,LAST%d,FOLLOW%d,ON%d\n",TYPE_CO,TYPE_FI,TYPE_LA,TYPE_FO,TYPE_O);    
    
    if( TYPE_CO == -1 || TYPE_AR == -1 || TYPE_PI== -1 ) {printf("CRITICAL ERROR"); return;}
    area_num = dis_gtype_size[TYPE_AR];
    pipe_num = dis_gtype_size[TYPE_PI];
    map = malloc( sizeof(int) * area_num * area_num );
    
    for(i=0;i<area_num;i++)
    for(j=0;j<area_num;j++){
        map[i*area_num+j] = -1;
        map[j*area_num+i] = -1;
    }
    
    for( i=0 ; i<dis_gnum_initial_predicate[TYPE_CO] ; i++ ){
        dis_Fact *fact = &(dis_ginitial_predicate[TYPE_CO][i]);
        
        int index1 = get_object_index(fact->args[0],TYPE_AR);
        int index2 = get_object_index(fact->args[1],TYPE_AR);
        map[index1*area_num+index2] = fact->args[2];
        map[index2*area_num+index1] = fact->args[2];
    }
}
Пример #4
0
float get_pipe_cost(int pipe_id){
    int speed = 1;
    //return pipe_size[get_object_index(pipe_id,TYPE_PI)] / speed ;
    return pipe_size[get_object_index(pipe_id,TYPE_PI)];
}
Пример #5
0
void get_path_1006(int f1, int f2, int *path, int *path_len, dis_State *state){
    int len = 0,i,j;

    dis_Fact *fact1 = &(dis_grelevant_facts[f1]);
    dis_Fact *fact2 = &(dis_grelevant_facts[f2]);
    int from_index = -1;
    int to_index = -1;
    int is_o_flag = 0;
    int visited[500];
    int expand_list[500];
    int pre[500];   
    int expand_list_size = -1;
    
    if( fact1->predicate == TYPE_O ){
        //printf("IS_ON\n");
        from_index = get_object_index(fact1->args[1],TYPE_AR);
        to_index = get_object_index(fact2->args[1],TYPE_AR);
        //printf("from_index%d,to_index %d\n",from_index,to_index);
        is_o_flag = 1;
        expand_list[0] = from_index;
        expand_list_size = 1;
    }else{
        int location = get_hidden_location(state, f1);
        //printf("HIDDEN LOCATION%s",dis_gconstants[location]); 
        from_index = -1;
        to_index = get_object_index(fact2->args[1],TYPE_AR);
        
        for(i=0;i<dis_gnum_initial_predicate[TYPE_CO];i++){
            dis_Fact *fact = &(dis_ginitial_predicate[TYPE_CO][i]);
            if(fact->args[2]==location){
            //  printf("CHOSEN FACT:");dis_print_dis_Fact(fact);printf("\n");
                expand_list[0] = get_object_index(fact->args[0],TYPE_AR);
                expand_list[1] = get_object_index(fact->args[1],TYPE_AR);
                break;
            }
        }
        
        expand_list_size = 2;
        is_o_flag = 0;
    }

    for( i=0;i<area_num;i++){
        pre[i] = -1;
        visited[i] = 0;
    }
    do{
        for( i=0 ; i< expand_list_size ; i++)
            visited[ expand_list[i] ] = 1;

        int tmp_list[500];
        int tmp_list_size = 0;
        
        for( i=0 ; i<expand_list_size; i++)
        for( j=0 ; j<area_num ; j++ ){
                int v = map[expand_list[i]*area_num + j ];
                if ( v!= -1 &&  !visited[j]) {
                    //printf("SETTING VALUE FOR PRE[%d]\n",j);
                    pre[j] = expand_list[i];
                    tmp_list[tmp_list_size++] = j;
                }
        }

        expand_list_size = 0;
        for(i=0;i<tmp_list_size;i++)
            expand_list[ expand_list_size++ ] = tmp_list[i];
        
        
    }while(expand_list_size);
    
    int tmp[500];
    int tmp_size = 0;
    int start = to_index;
    
    while( start!= from_index && start!=-1 ){
        tmp[tmp_size++] = dis_gtype_consts[TYPE_AR][start];
        start = pre[start];
    }
    if(start!=-1)
        tmp[tmp_size++] = dis_gtype_consts[TYPE_AR][start];
    
    //In the tmp list, there are all objects;
    if( !is_o_flag ) path[len++] = f1;
    for(i=tmp_size-1;i>=0;i--){
        int object = tmp[i];
        for(j=0;j<dis_gnum_relevant_facts;j++){
            dis_Fact *fact = &(dis_grelevant_facts[j]);
            
            if ( fact->predicate == TYPE_O && fact->args[0] == fact2->args[0] && fact->args[1] == object)
                path[len++] = j;
        }
    }
    
    *path_len = len;
}