コード例 #1
0
ファイル: game.cpp プロジェクト: stltomb/OpenTomb
/**
 * Load game state
 */
int Game_Load(const char* name)
{
    FILE *f;
    char *ch, local;

    local = 1;
    for(ch=(char*)name;*ch;ch++)
    {
        if((*ch == '\\') || (*ch == '/'))
        {
            local = 0;
            break;
        }
    }

    if(local)
    {
        char token[512];
        snprintf(token, 512, "save/%s", name);
        f = fopen(token, "rb");
        if(f == NULL)
        {
            Sys_extWarn("Can not read file \"%s\"", token);
            return 0;
        }
        fclose(f);
        Engine_LuaClearTasks();
        try {
            engine_lua.doFile(token);
        }
        catch(lua::RuntimeError& error) {
            Sys_DebugLog(LUA_LOG_FILENAME, "%s", error.what());
        }
        catch(lua::LoadError& error) {
            Sys_DebugLog(LUA_LOG_FILENAME, "%s", error.what());
        }
    }
    else
    {
        f = fopen(name, "rb");
        if(f == NULL)
        {
            Sys_extWarn("Can not read file \"%s\"", name);
            return 0;
        }
        fclose(f);
        Engine_LuaClearTasks();
        try {
            engine_lua.doFile(name);
        }
        catch(lua::RuntimeError& error) {
            Sys_DebugLog(LUA_LOG_FILENAME, "%s", error.what());
        }
        catch(lua::LoadError& error) {
            Sys_DebugLog(LUA_LOG_FILENAME, "%s", error.what());
        }
    }

    return 1;
}
コード例 #2
0
ファイル: world.cpp プロジェクト: ablepharus/OpenTomb
void World::empty()
{
    extern EngineContainer* last_cont;

    last_cont = NULL;
    Engine_LuaClearTasks();
    // De-initialize and destroy all audio objects.
    Audio_DeInit();

    if(main_inventory_manager != NULL)
    {
        main_inventory_manager->setInventory(NULL);
        main_inventory_manager->setItemsType(1);                                // see base items
    }

    if(character)
    {
        character->m_self->room = nullptr;
        character->m_currentSector = nullptr;
    }

    /* entity empty must be done before rooms destroy */
    entity_tree.clear();

    /* Now we can delete bullet misc */
    if(bt_engine_dynamicsWorld != NULL)
    {
        for(int i=bt_engine_dynamicsWorld->getNumCollisionObjects()-1;i>=0;i--)
        {
            btCollisionObject* obj = bt_engine_dynamicsWorld->getCollisionObjectArray()[i];
            btRigidBody* body = btRigidBody::upcast(obj);
            if(body != NULL)
            {
                EngineContainer* cont = (EngineContainer*)body->getUserPointer();
                body->setUserPointer(NULL);

                if(cont && (cont->object_type == OBJECT_BULLET_MISC))
                {
                    if(body->getMotionState())
                    {
                        delete body->getMotionState();
                        body->setMotionState(nullptr);
                    }

                    body->setCollisionShape(nullptr);

                    bt_engine_dynamicsWorld->removeRigidBody(body);
                    cont->room = NULL;
                    delete cont;
                    delete body;
                }
            }
        }
    }

    for(auto room : rooms)
    {
        room->empty();
    }
    rooms.clear();

    flip_data.clear();

    room_boxes.clear();

    cameras_sinks.clear();

    /*sprite empty*/
    sprites.clear();

    /*items empty*/
    items_tree.clear();

    character.reset();

    skeletal_models.clear();

    /*mesh empty*/

    meshes.clear();

    glDeleteTextures(textures.size() ,textures.data());
    textures.clear();

    tex_atlas.reset();

    anim_sequences.clear();
}