int main(int argc, char **argv) {
  int myints[] = {10, 20, 30, 5, 15};
  Vector *v = NewVector(int, 5);
  for (int i = 0; i < 5; i++) {
    Vector_Push(v, myints[i]);
  }

  Make_Heap(v, 0, v->top, cmp);

  int n;
  Vector_Get(v, 0, &n);
  assert(30 == n);

  Heap_Pop(v, 0, v->top, cmp);
  v->top = 4;
  Vector_Get(v, 0, &n);
  assert(20 == n);

  Vector_Push(v, 99);
  Heap_Push(v, 0, v->top, cmp);
  Vector_Get(v, 0, &n);
  assert(99 == n);

  Vector_Free(v);
  printf("PASS!\n");
  return 0;
}
Beispiel #2
0
Vector String_Split_c (const struct String_t * s, char d)
{
    assert (s);

    Vector vec = Vector_New (struct String_t);

    if (String_Size (s) == 0)
    {
        return vec;
    }

    struct String_t str = String ("");

    STRING_FOREACH (c, s)
    {
        if (c == d)
        {
            Vector_Push (vec, &str);
            String_Init (&str, "");
        }
        else
        {
            String_PushBack (&str, c);
        }
    }

    Vector_Push (vec, &str);

    return vec;
}
Beispiel #3
0
void GameManager_Update(GameManager* gm, World* world, Window* level_editor)
{



    Vector_Nullify(&world->non_null_walls);

    //oh god I don't know how to fix this horror
    for(int i = 0 ; i < world->map_size ; i++)
    {
        if(world->map[i] != NULL && world->map[i]->alive)
        {
            Vector_Push(&world->non_null_walls, world->map[i]);
        }
    }

    Player_Update(world);

    if(game_state_g != GameState_Editing_Map)
    {
        GameManage_UpdateWorldEntities(gm, world);
    }

    //GameManager_UpdateEnnemyWaves(gm, world, delta);
    //GameManager_UpdateUI(level_editor);
}
Beispiel #4
0
void GameManager_UpdateEnnemyWaves(GameManager* gm, World* world)
{
    gm->wave_timer -= delta_g;


    if(Vector_Count(&world->monsters_vector) == 0 || gm->wave_timer <= 0)
    {
        gm->wave_timer = 30000;
        int randX = 0;
        int randY = 0;

        for(int z_type = 0 ; z_type < NB_ZOMBIE_TYPES ; z_type++)
        {
            for(int i = 0 ; i < gm->waves[gm->wave_id].zombies[z_type] ; i++)
            {

                GameManager_GeneratePositionOutsideOfScreen(&randX, &randY);
                Vector_Push(&world->monsters_vector,
                            CreateZombie(   z_type,
                                            randX + world->player.playerC->cameraX,
                                            randY + world->player.playerC->cameraY

                                        )
                            );
            }
        }

        gm->wave_id += 1;

    }
}
void __dfn_putCache(Vector *cache, dfaNode *dfn) {
  Vector_Push(cache, dfn);
}
Beispiel #6
0
void Level_Load(char* file_name, World* w)
{
    Level_Clear(w);


    FILE *save_file;

    save_file = fopen(file_name, "rb");
    if(!save_file)
    {
        printf("Can't open file");

    }
    printf("gggggg");
    int nb_of_walls = 0;
    fread(&nb_of_walls, sizeof(int), 1, save_file);

    for(int i = 0 ; i < nb_of_walls ; i++)
    {
        Entity* buffer = (Entity*)malloc(sizeof(Entity)); //Entity_Spawn();
        fread(buffer, sizeof(Entity), 1, save_file);
        int position_in_array = buffer->x / TILE_SIZE + ((buffer->y/ TILE_SIZE) * w->map_width);

        w->map[position_in_array] = buffer;

    }


    for(int i = 0 ; i < w->map_size ; i++)
    {
        Entity* buffer = (Entity*)malloc(sizeof(Entity)); //Entity_Spawn();
        fread(buffer, sizeof(Entity), 1, save_file);
        int position_in_array = buffer->x / TILE_SIZE + ((buffer->y/ TILE_SIZE) * w->map_width);

        w->ground_map[position_in_array] = buffer;
    }

    printf("mdr");
    int num_of_events = 0;
    fread(&num_of_events, sizeof(int), 1, save_file);
    for(int i = 0 ; i < num_of_events ; i++)
    {
        Entity* buffer  = Entity_Spawn();
        LevelEditor_ReadEntity(save_file, buffer, w);

        Vector_Push(&w->events_vector, buffer);

    }
printf("mdr");
    int num_of_props = 0;
    fread(&num_of_props, sizeof(int), 1, save_file);
    for(int i = 0 ; i < num_of_props; i++)
    {
        Entity* buffer  = Entity_Spawn();
        LevelEditor_ReadEntity(save_file, buffer, w);

        Vector_Push(&w->props_vector, buffer);

    }

    int num_of_zombies = 0;
    fread(&num_of_zombies, sizeof(int), 1, save_file);

    printf("Loading %d mobs\n", num_of_zombies);
    if(num_of_zombies != 0)
    {
        for(int i = 0 ; i < num_of_zombies ; i++)
        {
            Entity* buffer  = Entity_Spawn();
            LevelEditor_ReadEntity(save_file, buffer, w);
            Vector_Push(&w->monsters_vector, buffer);

        }
    }

    int num_of_decalss = 0;
    fread(&num_of_decalss, sizeof(int), 1, save_file);
        printf("Loading %d decals\n", num_of_decalss);
    for(int i = 0 ; i < num_of_decalss ; i++)
    {
        Entity* buffer  = Entity_Spawn();
        LevelEditor_ReadEntity(save_file, buffer, w);
        Vector_Push(&w->decals_vector, buffer);

    }


    int num_of_bonus = 0;
    fread(&num_of_bonus, sizeof(int), 1, save_file);
    for(int i = 0 ; i < num_of_bonus ; i++)
    {
        Entity* buffer = Entity_Spawn();
        LevelEditor_ReadEntity(save_file, buffer, w);
        Vector_Push(&w->bonus_vector, buffer);

    }



    fclose(save_file);
}
Beispiel #7
0
void LevelEditor_CreateObject(Main_Category category, int obj_type, int x, int y,
                              int position_in_array, float mousePositionInWorldX,
                              float mousePositionInWorldY, World* world, bool unlimited,
                              float angle)
{

    if(category == Cat_Wall || category == Cat_Door)
    {
        free(world->map[position_in_array]);
        world->map[position_in_array] = Entity_Create(category, obj_type, x, y, angle, world);
    }

    else if(category == Cat_Ground)
    {
        Entity_Destroy(world->ground_map[position_in_array]);
        free(world->ground_map[position_in_array]);
        world->ground_map[position_in_array] = Entity_Create(category, obj_type, x, y, angle, world);
    }

    else if(category == Cat_Zombie &&
       (SDL_GetTicks() - building_time > 150 || unlimited))
    {
        Vector_Push(&world->monsters_vector,
                   Entity_Create(category, obj_type,
                                 mousePositionInWorldX,
                                 mousePositionInWorldY,
                                 0, world));

        building_time = SDL_GetTicks();
    }
    else if(category == Cat_Prop &&
       (SDL_GetTicks() - building_time > 150 || unlimited))
    {
        Vector_Push(&world->props_vector,
                   Entity_Create(category, obj_type,
                                 mousePositionInWorldX,
                                 mousePositionInWorldY,
                                 angle, world));

        building_time = SDL_GetTicks();
    }
    else if(category == Cat_Decal &&
       (SDL_GetTicks() - building_time > 150 || unlimited))
    {
        Vector_Push(&world->decals_vector,
                   Entity_Create(category, obj_type,
                                 mousePositionInWorldX,
                                 mousePositionInWorldY,
                                 angle, world));

        building_time = SDL_GetTicks();
    }
    else if(category == Cat_Event &&
            (SDL_GetTicks() - building_time > 150))
    {
        //there can be only 1 player start and end of level
        for(int i = 0 ; i < Vector_Count(&world->events_vector) ; i++)
        {
            Entity* map_event = (Entity*)Vector_Get(&world->events_vector, i);
            if((obj_type == Event_Player_Start || obj_type == Event_End_Level )&&
               obj_type == map_event->sub_category)
            {
                Vector_Delete(&world->events_vector, i);
            }
        }
        Vector_Push(&world->events_vector, Entity_Create(category, obj_type, x, y, 0, world));
        building_time = SDL_GetTicks();
    }
    else if(category == Cat_Bonus && (SDL_GetTicks() - building_time > 150 ||
                                       unlimited))
    {
        Vector_Push(&world->bonus_vector, Entity_Create(category, obj_type, mousePositionInWorldX, mousePositionInWorldY, 0, world));
        building_time = SDL_GetTicks();
    }

}
Beispiel #8
0
void GameManage_UpdateWorldEntities(GameManager* gm, World* world)
{
    Vector* bullets_vector = &world->bullets_vector;
    Vector* bonus_vector = &world->bonus_vector;
    Vector* monsters_vector = &world->monsters_vector;
    Vector* explosions_vector = &world->explosions_vector;
    Vector* decals_vector = &world->decals_vector;
    Vector* props_vector = &world->props_vector;


    for(int i = 0 ; i < world->map_size ; i++)
    {
        if(world->map[i] != NULL)
        {
           // Entity_CalculateVisibility(world->map[i], world);
            if(world->map[i]->t == Cat_Door)
            {
                Door_Update(world->map[i], world);
            }

            if(!world->map[i]->alive)
            {
                free(world->map[i]);//walls don't have any compotent, no need to destroy them
                world->map[i] = NULL;
            }
        }
    }



    for(int i = 0 ; i < Vector_Count(bullets_vector) ; i++)
    {
        if(Vector_Get(bullets_vector, i) != NULL)
        {
            Entity* projectile = (Entity*)Vector_Get(bullets_vector, i);
            Entity_CalculateVisibility(projectile, world);

            if(!bullet_time_g)
            {
                if(projectile->t == Cat_Bullet)
                {

                     Bullet_Update(projectile, world);
                }
                else if(projectile->t == Cat_Grenade)
                {
                    Grenade_Update(projectile, world);

                    if(!projectile->alive)
                    {
                        Vector_Push(explosions_vector, Explosion_Create(projectile->x - 64, projectile->y - 64) );
                    }
                }

                if (projectile->alive == false)
                {
                    Entity_Destroy(projectile);
                    Vector_Delete(bullets_vector, i);
                }
            }
        }
        else
        {
            printf("Error during update of bullets vector : bullet = NULL");
        }
    }



    if(gm->ai_on)
    {
        for(int i = 0 ; i < Vector_Count(monsters_vector) ; i++)
        {
            Entity* mob = (struct Entity*)Vector_Get(monsters_vector, i);

            if(Entity_CheckDistance(mob, &world->player, 800))
            {
                Entity_CalculateVisibility(mob, world);
            }

            if(mob->zombieC->aggressive || Entity_CheckDistance(mob, &world->player, 400))
            {
                Zombie_Update(mob, world);
            }



            if (mob->alive == false)
            {
                Zombie_Die(mob, bonus_vector, decals_vector);
                Entity_Destroy(mob);
                Vector_Delete(monsters_vector, i);

            }
        }
    }



    for(int i = 0 ; i < Vector_Count(bonus_vector) ; i++)
    {

        if(Vector_Get(bonus_vector, i) != NULL)
        {
            Entity* bonus = (Entity*)Vector_Get(bonus_vector, i);

            if(Entity_CheckDistance(bonus, &world->player, 800))
            {
                if(!bullet_time_g)
                {
                    Bonus_Update(bonus, &world->player);
                }


                Entity_CalculateVisibility(bonus, world);

            }
            if (bonus->alive == false)
            {
                Entity_Destroy(bonus);
                Vector_Delete(bonus_vector, i);
            }
        }
        else
        {
            printf("Error during update of bonus vector : bonus = NULL");
        }
    }

    for(int i = 0 ; i < Vector_Count(decals_vector) ; i++)
    {

        Entity* decal = (Entity*)Vector_Get(decals_vector, i);

        if(Entity_CheckDistance(decal, &world->player, 800))
        {
            Entity_CalculateVisibility(decal, world);

        }
        if(Vector_Count(decals_vector) > 200)
        {
            if(decal->is_ennemy)
            {
                Vector_Delete(decals_vector, i);
            }
        }

    }

    for(int i = 0 ; i < Vector_Count(props_vector) ; i++)
    {
        Entity* prop = (Entity*)Vector_Get(props_vector, i);

        if(Entity_CheckDistance(prop, &world->player, 800))
        {
            Entity_CalculateVisibility(prop, world);
        }
        if (!prop->alive)
        {
            Entity_Destroy(prop);
            Vector_Delete(props_vector, i);
        }
    }





    for(int i = 0 ; i < Vector_Count(explosions_vector) ; i++)
    {
        Entity* exp = (Entity*)Vector_Get(explosions_vector, i);
        if(!bullet_time_g)
        {
            Explosion_Update(exp, world);
        }

        Entity_CalculateVisibility(exp, world);
        if (!exp->alive)
        {
            Entity_Destroy(exp);
            Vector_Delete(explosions_vector, i);
        }
    }
}