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; }
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; }
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); }
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); }
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); }
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(); } }
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); } } }