Ejemplo n.º 1
0
void Level_Clear(World* w)
{
    for(int i = 0 ; i < Vector_Count(&w->monsters_vector) ; i++)
    {
        Entity* ent = Vector_Get(&w->monsters_vector, i);
        Entity_Destroy(ent);
    }
    for(int i = 0 ; i < Vector_Count(&w->bonus_vector) ; i++)
    {
        Entity* ent = Vector_Get(&w->bonus_vector, i);
        Entity_Destroy(ent);

    }
    for(int i = 0 ; i < Vector_Count(&w->bullets_vector) ; i++)
    {
        Entity* ent = Vector_Get(&w->bullets_vector, i);
        Entity_Destroy(ent);
    }
    for(int i = 0 ; i < Vector_Count(&w->explosions_vector) ; i++)
    {
        Entity* ent = Vector_Get(&w->explosions_vector, i);
        Entity_Destroy(ent);
    }

    Vector_Clear(&w->monsters_vector);
    Vector_Clear(&w->bonus_vector);
    Vector_Clear(&w->events_vector);
    Vector_Clear(&w->bullets_vector);
    Vector_Clear(&w->explosions_vector);
    Vector_Clear(&w->decals_vector);
    Vector_Clear(&w->props_vector);

    for(int i = 0 ; i < w->map_size ; i++)
    {
        free(w->map[i]);

    }

    for(int i = 0 ; i < w->map_size ; i++)
    {
        free(w->ground_map[i]);
    }

}
Ejemplo n.º 2
0
void Player_Reset(Entity* player)
{
    //destroy all the pointers
    Entity_Destroy(player);

    player->playerC = PlayerC_Create();

    player->movementC                     =   MovementC_Create();
    player->movementC->speed              =   BASE_PLAYER_SPEED;
    player->hp                            =   10;

    player->weaponsC                      =   WeaponsComponent_Create(false);
    WeaponsComponent_AddWeaponToInventory(player->weaponsC,
                                          Weapon_Create(Weapon_Handgun));
    WeaponsComponent_ChangeWeapon(player->weaponsC,
                                  Weapon_Handgun);
    player->weaponsC->bullets[Weapon_Handgun] = 100;

    player->weaponsC->is_monster = false;
}
Ejemplo n.º 3
0
void Inputs_ApplyInputsLevelEditor(Controls* controls,
                            World* world, Window* level_editor,
                            GameManager* gm)
{
    rotate_timer += delta_g;

    if(pressedKeys[SDLK_F1] && SDL_GetTicks() - switch_timer > 200)
    {
        draw_grid_g = draw_grid_g? false : true;
    }

    if(pressedKeys[SDLK_F7] && SDL_GetTicks() - switch_timer > 2000)
    {
        switch_timer = SDL_GetTicks();
        LevelEditor_QuickTry(world);
    }


    int position_in_array = controls->mouseTileY * world->map_width + controls->mouseTileX;

    if(controls->temp_object_to_create != NULL)
    {
        if(pressedKeys[SDLK_f] && !previousPressedKeys_g[SDLK_f])
        {
            SDL_WarpMouseInWindow(Graphics_GetWindow(),
                                  (controls->mouseTileX * TILE_SIZE - world->player.playerC->cameraX),
                                  controls->mouseTileY * TILE_SIZE - world->player.playerC->cameraY);
        }
        if(pressedKeys[SDLK_RIGHT] && !previousPressedKeys_g[SDLK_RIGHT])
        {
            SDL_WarpMouseInWindow(Graphics_GetWindow(),
                                  (controls->mouseX + 1 ),
                                  controls->mouseY);
        }
        if(pressedKeys[SDLK_LEFT] && !previousPressedKeys_g[SDLK_LEFT])
        {
            SDL_WarpMouseInWindow(Graphics_GetWindow(),
                                  (controls->mouseX - 1 ),
                                  controls->mouseY);
        }
        if(pressedKeys[SDLK_UP] && !previousPressedKeys_g[SDLK_UP])
        {
            SDL_WarpMouseInWindow(Graphics_GetWindow(),
                                  (controls->mouseX ),
                                  controls->mouseY - 1);
        }
        if(pressedKeys[SDLK_DOWN] && !previousPressedKeys_g[SDLK_DOWN])
        {
            SDL_WarpMouseInWindow(Graphics_GetWindow(),
                                  (controls->mouseX),
                                  controls->mouseY + 1);
        }

        if(controls->mouseWheelPos < 0 && rotate_timer > 50)
        {
            if(controls->temp_object_to_create->angle == 0)
            {
                controls->temp_object_to_create->angle = HALF_PI;
            }
            else if(controls->temp_object_to_create->angle <= HALF_PI + 0.1f)
            {
                controls->temp_object_to_create->angle = HALF_PI * 2;
            }
            else if(controls->temp_object_to_create->angle <= HALF_PI * 2 + 0.1f)
            {
                controls->temp_object_to_create->angle = HALF_PI * 3;
            }
            else if(controls->temp_object_to_create->angle <= HALF_PI * 3 + 0.1f)
            {
                controls->temp_object_to_create->angle = 0;
            }

            rotate_timer = 0;
        }
        if(controls->mouseWheelPos > 0 && rotate_timer > 50)
        {
            if(controls->temp_object_to_create->angle == 0)
            {
                controls->temp_object_to_create->angle = HALF_PI * 3;
            }
            else if(controls->temp_object_to_create->angle >= HALF_PI * 3 - 0.1f)
            {
                controls->temp_object_to_create->angle = HALF_PI * 2;
            }
            else if(controls->temp_object_to_create->angle >= HALF_PI * 2 - 0.1f)
            {
                controls->temp_object_to_create->angle = HALF_PI;
            }
            else if(controls->temp_object_to_create->angle >= HALF_PI - 0.2f)
            {
                controls->temp_object_to_create->angle = 0;
            }
            rotate_timer = 0;
        }

        controls->temp_object_to_create->x = controls->mousePositionInWorldX;
        controls->temp_object_to_create->y = controls->mousePositionInWorldY;
        BoundingBox_Update(controls->temp_object_to_create);


    }


    Vector* monsters_vector = &world->monsters_vector;
    if(BoundingBox_CheckPointCollision(controls->mouseX, controls->mouseY, &level_editor->box))
    {
       controls->hovering_on_window = true;

        //selecting button in level_editor
        if(controls->pressedMouseButtons[SDL_BUTTON_LEFT])
        {
            for(int i = 0 ; i < level_editor->nb_of_buttons ; i++)
            {
                if(BoundingBox_CheckPointCollision(controls->mouseX,
                                                   controls->mouseY,
                                                   &level_editor->buttons[i].box))
                {
                    level_editor->active_button = &level_editor->buttons[i];

                    if(controls->temp_object_to_create != NULL)
                    {
                        Entity_Destroy(controls->temp_object_to_create);
                        free(controls->temp_object_to_create);
                    }


                    controls->temp_object_to_create = Entity_Create(level_editor->active_button->main_category,
                                                                    level_editor->active_button->button_type,
                                                                    controls->mouseX, controls->mouseY,
                                                                    0, world);



                }
            }
        }

        //showing window resizing cursor
        if((controls->mouseX > level_editor->box.right - 10 ||
           controls->mouseX < level_editor->box.left + 10) &&
           controls->active_window == NULL)
        {
            controls->cursor_resize_left_right = true;

            if(controls->pressedMouseButtons[SDL_BUTTON_LEFT] &&
               controls->previousPressedMouseButtons[SDL_BUTTON_LEFT] &&
               controls->mouseX > level_editor->box.right - 10)
            {
                controls->resizing_right = true;
            }

            if(controls->pressedMouseButtons[SDL_BUTTON_LEFT] &&
               controls->previousPressedMouseButtons[SDL_BUTTON_LEFT] &&
               controls->mouseX < level_editor->box.left + 10)
            {
                controls->resizing_left = true;
            }
        }
        else
        {
            controls->cursor_resize_left_right = false;
        }

        //clicking on the level editor window
       if(controls->pressedMouseButtons[SDL_BUTTON_LEFT] &&
            controls->previousPressedMouseButtons[SDL_BUTTON_LEFT] &&
            !controls->cursor_resize_left_right)
        {
            controls->active_window = level_editor;
        }
    }
    else //if not hovering on the window
    {
        controls->cursor_resize_left_right = false;
        controls->cursor_resize_up_down = false;
        controls->hovering_on_window = false;

    }

    //if you've clicked on the window and then stopped clicking, it's not "active" anymore
    if(controls->active_window != NULL &&
       !controls->previousPressedMouseButtons[SDL_BUTTON_LEFT])
    {
        controls->active_window = NULL;
    }

    //resizing window
    if(controls->resizing_right || controls->resizing_left)
    {
        controls->cursor_resize_left_right = true;

        if(!controls->pressedMouseButtons[SDL_BUTTON_LEFT] &&
           !controls->previousPressedMouseButtons[SDL_BUTTON_LEFT])
        {
            controls->resizing_right = false;
            controls->resizing_left = false;
        }

        if(controls->resizing_right)
        {
            Window_ResizeRight(level_editor, controls->mouseX - controls->previousMouseX);
        }
        else if(controls->resizing_left)
        {
            Window_ResizeLeft(level_editor, controls->mouseX - controls->previousMouseX);
        }

    }

    //moving window
    if(controls->active_window != NULL &&
       controls->pressedMouseButtons[SDL_BUTTON_LEFT] &&
       controls->previousPressedMouseButtons[SDL_BUTTON_LEFT] &&
       !controls->resizing_left && !controls->resizing_right)
    {

         Window_Move(level_editor,
                     controls->mouseX - controls->previousMouseX,
                     controls->mouseY - controls->previousMouseY);
    }

    if(pressedKeys[SDLK_LCTRL])
    {
        unlimited_creation = true;
    }
    else
    {
        unlimited_creation = false;
    }


    //if not hovering and not moving window
    //we can create/delete stuff on the map
    if(!controls->active_window && !controls->hovering_on_window)
    {
        if (level_editor->active_button != NULL)
        {

            Main_Category category = level_editor->active_button->main_category;
            int obj_type = level_editor->active_button->button_type;

            if(!rectangle_selection_create &&
               (controls->pressedMouseButtons[SDL_BUTTON_RIGHT] ||
                pressedKeys[SDLK_SPACE]))
            {
                if (controls->mouseTileX < world->map_width && controls->mouseTileX > 0 &&
                    controls->mouseTileY < world->map_height && controls->mouseTileY > 0)
                {

                    //pressing shift activate the rectangle selection tool
                    if((category == Cat_Wall || category == Cat_Ground) &&
                       pressedKeys[SDLK_LSHIFT])
                    {

                        rectangle_selection_startX = controls->mousePositionInWorldX;
                        rectangle_selection_startY = controls->mousePositionInWorldY;
                        rectangle_selection_create = true;
                    }

                        LevelEditor_CreateObject(category, obj_type, controls->tileInPixelsX, controls->tileInPixelsY,
                                                 position_in_array, controls->mousePositionInWorldX,
                                                 controls->mousePositionInWorldY, world, unlimited_creation,
                                                 controls->temp_object_to_create->angle);

                }
                else
                    printf("out of bound!!!");
            }

            //remove wall (replace it with empty entity)
            if(pressedKeys[SDLK_c])

            {


            }

            //deleting monster
            if(pressedKeys[SDLK_x])
            {
                if(pressedKeys[SDLK_LSHIFT] && !rectangle_selection_delete)
                {
                    rectangle_selection_startX = controls->mousePositionInWorldX;
                    rectangle_selection_startY = controls->mousePositionInWorldY;
                    rectangle_selection_delete = true;
                }
                if(!rectangle_selection_delete)
                {
                    LevelEditor_UpdateWallsCorners(position_in_array, world);
                    free(world->map[position_in_array]);
                    world->map[position_in_array] = NULL;
                }

                for(int i = 0 ; i < Vector_Count(&world->monsters_vector) ; i++)
                {
                    Entity* mob = (Entity*)Vector_Get(&world->monsters_vector, i);
                    if(BoundingBox_CheckPointCollision(controls->mousePositionInWorldX,
                                                       controls->mousePositionInWorldY,
                                                       &mob->box))
                    {
                        Entity_Destroy(mob);
                        Vector_Delete(&world->monsters_vector, i);

                    }
                }
                for(int i = 0 ; i < Vector_Count(&world->bonus_vector) ; i++)
                {
                    Entity* bonus = (Entity*)Vector_Get(&world->bonus_vector, i);
                    if(BoundingBox_CheckPointCollision(controls->mousePositionInWorldX,
                                                       controls->mousePositionInWorldY,
                                                       &bonus->box))
                    {
                        Entity_Destroy(bonus);
                        Vector_Delete(&world->bonus_vector, i);

                    }
                }
                for(int i = 0 ; i < Vector_Count(&world->props_vector) ; i++)
                {
                    Entity* obj = (Entity*)Vector_Get(&world->props_vector, i);
                    if(BoundingBox_CheckPointCollision(controls->mousePositionInWorldX,
                                                       controls->mousePositionInWorldY,
                                                       &obj->box))
                    {
                        Entity_Destroy(obj);
                        Vector_Delete(&world->props_vector, i);

                    }
                }
                for(int i = 0 ; i < Vector_Count(&world->decals_vector) ; i++)
                {
                    Entity* obj = (Entity*)Vector_Get(&world->decals_vector, i);
                    if(BoundingBox_CheckPointCollision(controls->mousePositionInWorldX,
                                                       controls->mousePositionInWorldY,
                                                       &obj->box))
                    {
                        Entity_Destroy(obj);
                        Vector_Delete(&world->decals_vector, i);

                    }
                }
            }



            /*stopping pressing left shift stop the selection and creates the selection tile
            in the selection (only if it's a tile and not a monster/object
            */
            if((rectangle_selection_create || rectangle_selection_delete) && pressedKeys[SDLK_LSHIFT])
            {
                rectangle_selection_endX = controls->mousePositionInWorldX;
                rectangle_selection_endY =controls->mousePositionInWorldY;

                int startX = rectangle_selection_startX;
                int endX = rectangle_selection_endX;
                int startY = rectangle_selection_startY;
                int endY = rectangle_selection_endY;

                if(rectangle_selection_endY <= rectangle_selection_startY)
                {
                    startY = rectangle_selection_endY;
                    endY = rectangle_selection_startY;
                }
                if(rectangle_selection_endX <= rectangle_selection_startX)
                {
                    startX = rectangle_selection_endX;
                    endX = rectangle_selection_startX;
                }


                int tileStartX = startX / TILE_SIZE;
                int tileStartY = startY / TILE_SIZE;
                int tileEndX = endX / TILE_SIZE;
                int tileEndY = endY / TILE_SIZE;

                for(int y = tileStartY ; y <= tileEndY ; y++)
                {
                    for(int x = tileStartX ; x <= tileEndX ; x++)
                    {
                        position_in_array = y * world->map_width + x;
                        if(rectangle_selection_create)
                        {
                            int obj_type = level_editor->active_button->button_type;
                            LevelEditor_CreateObject(category, obj_type, x * TILE_SIZE, y * TILE_SIZE,
                                         position_in_array, controls->mousePositionInWorldX,
                                         controls->mousePositionInWorldY, world, unlimited_creation,
                                         controls->temp_object_to_create->angle);
                        }
                        else if(rectangle_selection_delete)
                        {
                            LevelEditor_UpdateWallsCorners(position_in_array, world);
                            free(world->map[position_in_array]);
                            world->map[position_in_array] = NULL;

                        }
                    }
                }

                if(rectangle_selection_delete)
                {
                    for(int i = 0 ; i < Vector_Count(&world->monsters_vector) ; i++)
                    {
                        Entity* obj = (Entity*)Vector_Get(&world->monsters_vector, i);
                        if(obj->box.right > startX &&
                           obj->box.left < endX &&
                           obj->box.bottom > startY &&
                           obj->box.top < endY)
                        {
                            Entity_Destroy(obj);
                            Vector_Delete(&world->monsters_vector, i);
                        }
                    }
                    for(int i = 0 ; i < Vector_Count(&world->bonus_vector) ; i++)
                    {
                        Entity* obj = (Entity*)Vector_Get(&world->bonus_vector, i);
                        if(obj->box.right > startX &&
                           obj->box.left < endX &&
                           obj->box.bottom > startY &&
                           obj->box.top < endY)
                        {
                            Entity_Destroy(obj);
                            Vector_Delete(&world->bonus_vector, i);

                        }
                    }
                    for(int i = 0 ; i < Vector_Count(&world->props_vector) ; i++)
                    {
                        Entity* obj = (Entity*)Vector_Get(&world->props_vector, i);
                        if(obj->box.right > startX &&
                           obj->box.left < endX &&
                           obj->box.bottom > startY &&
                           obj->box.top < endY)
                        {
                            Entity_Destroy(obj);
                            Vector_Delete(&world->props_vector, i);

                        }
                    }
                    for(int i = 0 ; i < Vector_Count(&world->decals_vector) ; i++)
                    {
                        Entity* obj = (Entity*)Vector_Get(&world->decals_vector, i);
                        if(obj->box.right > startX &&
                           obj->box.left < endX &&
                           obj->box.bottom > startY &&
                           obj->box.top < endY)
                        {
                            Entity_Destroy(obj);
                            Vector_Delete(&world->decals_vector, i);

                        }
                    }
                }
            }

            if((rectangle_selection_create || rectangle_selection_delete) && !pressedKeys[SDLK_LSHIFT])
            {
                rectangle_selection_create = false;
                rectangle_selection_delete = false;
            }


        }





        //deleting every monster
        if(pressedKeys[SDLK_u])
        {
           // Vector_Clear(&world->monsters_vector); leads to memory leak
        }



        //cancel current selected object
        /*if(pressedKeys[SDLK_e])
        {
            level_editor->active_button = NULL;
        }*/



        //switch mobs AI
        if(pressedKeys[SDLK_a] &&
           SDL_GetTicks() - controls->last_ai_switch > 150)
        {
            if(gm->ai_on)
            {
                gm->ai_on = false;
            }
            else
            {
                gm->ai_on = true;
            }

            controls->last_ai_switch = SDL_GetTicks();
        }
    }


}
Ejemplo n.º 4
0
~EntityQ3API(){
	Entity_Destroy();
}
Ejemplo n.º 5
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();
    }

}
Ejemplo n.º 6
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);
        }
    }
}